#docker #permissions #docker-volume #chown #owner
#docker #разрешения #docker-том #chown #владелец
Вопрос:
Я нигде не могу найти ответа, почему docker меняет владельца файлов, смонтированных как том. Перед docker run
:
$ ls -la
total 56
drwxrwxr-x 9 ci ci 4096 Mar 13 21:13 .
drwxrwxr-x 4 ci ci 4096 Mar 13 21:12 ..
-rw-rw-r-- 1 ci ci 1108 Mar 13 21:13 application.yml
drwxrwxr-x 5 ci ci 4096 Mar 13 21:13 ci
drwxrwxr-x 5 ci ci 4096 Mar 13 21:13 config
drwxrwxr-x 3 ci ci 4096 Mar 13 21:13 database
-rw-rw-r-- 1 ci ci 2779 Mar 13 21:13 Dockerfile
drwxrwxr-x 3 ci ci 4096 Mar 13 21:13 docker-stuff
drwxrwxr-x 8 ci ci 4096 Mar 13 21:13 .git
-rw-rw-r-- 1 ci ci 137 Mar 13 21:13 .gitignore
-rwxrwxr-x 1 ci ci 6366 Mar 13 21:13 image.sh
После docker run
:
$ ls -la
total 60
drwxrwxr-x 10 administrator administrator 4096 Mar 13 21:15 .
drwxrwxr-x 4 ci ci 4096 Mar 13 21:12 ..
-rw-rw-r-- 1 administrator administrator 1108 Mar 13 21:13 application.yml
drwxrwxr-x 5 administrator administrator 4096 Mar 13 21:13 ci
drwxrwxr-x 5 ci ci 4096 Mar 13 21:13 config
drwxrwxr-x 3 administrator administrator 4096 Mar 13 21:13 database
-rw-rw-r-- 1 administrator administrator 2779 Mar 13 21:13 Dockerfile
drwxrwxr-x 3 administrator administrator 4096 Mar 13 21:13 docker-stuff
drwxrwxr-x 8 administrator administrator 4096 Mar 13 21:13 .git
-rw-rw-r-- 1 administrator administrator 137 Mar 13 21:13 .gitignore
-rwxrwxr-x 1 administrator administrator 6366 Mar 13 21:13 image.sh
Полная docker run
команда:
docker run -d
--rm
--name "$CONTAINER_NAME"
-p "$SHINY_HOST_PORT:3838"
-p "$RSTUDIO_HOST_PORT:8787"
-v "$DATA_DIR_ON_HOST":"$DATA_DIR_IN_CONTAINER"
-v "$CONFIG_DIR_ON_HOST":"$CONFIG_DIR_IN_CONTAINER"
-v $(pwd):"/data/"
"$DOCKER_IMAGE":"$DOCKER_TAG"
Мои группы пользователей:
$ groups
ci sudo docker administrator
У вас есть какие-либо идеи, почему это происходит?
Ответ №1:
Попробуйте следующую команду, которая добавляет --user
опциюdocker run для управления uid и gid, которые будут использоваться процессом, запущенным в вашем контейнере:
docker run -d
--rm
--name "$CONTAINER_NAME"
-p "$SHINY_HOST_PORT:3838"
-p "$RSTUDIO_HOST_PORT:8787"
-v "$DATA_DIR_ON_HOST":"$DATA_DIR_IN_CONTAINER"
-v "$CONFIG_DIR_ON_HOST":"$CONFIG_DIR_IN_CONTAINER"
-v $(pwd):"/data/"
--user "$(id -u ci):$(getent group ci | cut -d: -f3)"
"$DOCKER_IMAGE":"$DOCKER_TAG"
id -u ci
получит uid пользователяci
getent group ci | cut -d: -f3
получит gid группыci
Ответ №2:
Разрешения в контейнере по умолчанию выполняются от имени root, поэтому каждый раз, когда вы монтируете том, разрешения сбрасываются до root. Обратитесь к этой статье.