Что изменилось между этими двумя версиями докера для изменения прав на тома? - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть 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 и gid0. Чего я не понимаю, так это того, почему с более современной версией этого больше не происходит.

Я попробовал / обесценил несколько способов работы:

Я виделмножество примеров в Интернете, которые предлагают установить поле user в compose для идентификатора пользователя на хост-компьютере.К сожалению, это вызывает проблемы с правами доступа для некоторых сценариев, которые, похоже, ожидают запуска от имени пользователя root и не особенно переносимы.

Кроме того, мы, к сожалению, не сможем обновить версию Docker на локальном компьютере.на некоторое время, поэтому решение должно быть доступно для v 1.10 и иметь как можно меньшее влияние на других пользователей механизма докера (что, я думаю, делает пространства имен пользователей немного более сложными, но я не совсемпоймите их, чтобы я мог ошибиться).

Мой вопрос: что изменилось между двумя версиями Docker, чтобы изменить это поведение, и могу ли я что-то сделать, чтобы более раннее поведение велось как более позднее?Созданным файлам и каталогам следует предоставить права доступа пользователя-хоста вместо прав root.

1 Ответ

0 голосов
/ 20 декабря 2018

В MacOS у вас есть osxfs, который сопоставляет права доступа к файлам способом, который относительно прозрачен для пользовательских томов монтирования:

https://docs.docker.com/docker-for-mac/osxfs/

Непосредственно в Linux тома монтируются с одинаковымиUID / GID в контейнере и в хосте.Если вы запускаете приложения от имени другого пользователя в контейнере, мое решение состоит в том, чтобы запустить контейнер от имени пользователя root, изменить пользователя контейнера в соответствии с разрешениями на монтирование тома и затем su для этого пользователя для запуска приложения.Сценарии для этого и полный пример приведены по адресу:

https://github.com/sudo-bmitch/docker-base

Если вы запустите свое приложение от имени root в контейнере, то оно создаст файлы с правами root на томе в Linux.Я не знаю каких-либо простых обходных путей к этому.

...