У меня есть docker-compose.yml
, который выглядит так:
version: '2'
services:
foo:
image: node:11
volumes:
- ".:/usr/src"
working_dir: "/usr/src"
# ...
На моем Mac у меня есть Docker 18.09.На нашем сервере сборки jenkins у меня есть Docker 1.10.
Если я запускаю следующее на обеих машинах
docker-compose run foo mkdir hello
На компьютере Mac создается папка, принадлежащая моему пользователю, на сервере сборки.создает папку с правами root.Если я запускаю ls -l
для каждого:
ls -l # After folder created with Docker 18.09 on Mac
...
drwxr-xr-x 2 my_user my_group 64 Dec 19 00:10 hello
...
ls -l # After folder created with Docker 1.10 on Jenkins machine
...
drwxr-xr-x 2 root root 64 Dec 19 00:10 hello
...
Я понимаю, что в более ранней версии каталог создается с использованием учетной записи докера root
и ему предоставляются разрешения с uid
и gid
0. Чего я не понимаю, так это того, почему с более современной версией этого больше не происходит.
Я попробовал / обесценил несколько способов работы:
Я виделмножество примеров в Интернете, которые предлагают установить поле user
в compose для идентификатора пользователя на хост-компьютере.К сожалению, это вызывает проблемы с правами доступа для некоторых сценариев, которые, похоже, ожидают запуска от имени пользователя root и не особенно переносимы.
Кроме того, мы, к сожалению, не сможем обновить версию Docker на локальном компьютере.на некоторое время, поэтому решение должно быть доступно для v 1.10 и иметь как можно меньшее влияние на других пользователей механизма докера (что, я думаю, делает пространства имен пользователей немного более сложными, но я не совсемпоймите их, чтобы я мог ошибиться).
Мой вопрос: что изменилось между двумя версиями Docker, чтобы изменить это поведение, и могу ли я что-то сделать, чтобы более раннее поведение велось как более позднее?Созданным файлам и каталогам следует предоставить права доступа пользователя-хоста вместо прав root.