Docker-compose устанавливает пользователя и группу на установленном томе
Я пытаюсь установить том в файле docker-compose для apache. Проблема в том, что apache в моем докере выполняется под www-data:www-data
, но смонтированный каталог создается под root:root
. Как я могу указать пользователя смонтированного каталога?
Я попытался запустить команду setupApacheRights.sh
. chown -R www-data:www-data /var/www
, но он говорит chown: changing ownership of '/var/www/somefile': Permission denied
services:
httpd:
image: apache-image
ports:
- "80:80"
volumes:
- "./:/var/www/app"
links:
- redis
command: /setupApacheRights.sh
Я бы предпочел указать пользователя, под которым он будет установлен. Есть ли способ?
Ответы
Ответ 1
Сначала определите идентификатор пользователя www-data
:
$ docker exec DOCKER_CONTAINER_ID id
uid=100(www-data) gid=101(www-data) groups=101(www-data)
Затем на хосте докера измените владельца смонтированного каталога с помощью uid (в данном примере 100):
chown -R 100 ./
Динамическое расширение
Если вы используете docker-compose
вы можете сделать это следующим образом:
$ docker-compose exec SERVICE_NAME id
uid=100(www-data) gid=101(www-data) groups=101(www-data)
$ chown -R 100 ./
Вы можете поместить это в одну строку:
$ chown -r $(docker-compose exec SERVICE_NAME id -u) ./
Флаг -u
будет печатать только uid
на стандартный вывод.
Ответ 2
Для достижения желаемого поведения без изменения владельца/разрешений в хост-системе выполните следующие действия.
-
добавьте определение в ваш docker-compose.yml
user: "${UID}:${GID}"
так что ваш файл может выглядеть так
php: # this is my service name
user: "${UID}:${GID}" # we added this line to get a specific user / group id
image: php:7.3-fpm-alpine # this is my image
# and so on
-
установите значения в вашем .env
файле
UID=1000
GID=1001
Теперь ваш пользователь в контейнере имеет идентификатор 1000, а группа - 1001, и вы можете установить это по-разному для каждой среды.
Если вы не используете docker-compose или хотите узнать больше различных подходов для достижения этой цели, прочитайте мой источник информации: https://dev.to/acro5piano/specifying-user-and-group-in-docker- i2e
Ответ 3
Очевидно, что по состоянию на середину 2019 года нет настроек владельца/группы/разрешения для volume
, но есть хороший обходной путь, который заключается в создании каталога с нужными настройками в вашем docker-compose. Когда docker-compose монтируется в этом месте, он сохраняет эти разрешения.
Dockerfile:
# setup folder before switching to user
RUN mkdir /volume_data
RUN chown postgres:postgres /volume_data
USER postgres
докер-compose.yml
volumes:
- /home/me/postgres_data:/volume_data
источник