Как запустить контейнер с настройкой пространства имен пользователя? - PullRequest
1 голос
/ 18 февраля 2020

В приведенном ниже файле docker базовое изображение (jenkins/jenkins) предоставляет пользователю jenkins с UID 1000 и GID 1000 в контейнере.

FROM jenkins/jenkins

# Install some base packages

# Use non-privileged user provided by base image
USER jenkins # with uid 1000 and GID 1000

# Copy plugins and other stuff

На хосте docker (экземпляр EC2) мы также создали аналогичные UID и GID,

 $ groupadd -g 1000 jenkins
 $ useradd -u 1000 -g jenkins jenkins
 $ mkdir -p /abc/home_folder_for_jenkins
 $ chown -R jenkins:jenkins /abc/home_folder_for_jenkins

, чтобы убедиться, что контейнер может записывать файлы в /abc/home_folder_for_jenkins в экземпляре EC2.


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

Таким образом, приведенная ниже конфигурация выполняется для docker хост (EC2):

$ echo dockremap:165536:65536 > /etc/subuid
$ echo dockremap:165536:65536 > /etc/subgid
$ echo '{"debug":true, "userns-remap":"default"}' > /etc/docker/daemon.json

Эта конфигурация dockremap не позволяет запускаться jenkins, и docker контейнер переходит в Exited состояние:

$ ls -l /abc/home_folder_for_jenkins
total 0

После удаление docker переназначения конфигурации, все работает нормально.


Почему конфигурация dockremap не позволяет контейнеру jenkins работать как jenkins пользователь?

Ответы [ 2 ]

2 голосов
/ 20 февраля 2020

Я на самом деле борюсь с этим, потому что он кажется не очень портативным, но это лучшее, что я нашел. Как сказано выше на вашем docker хосте, UID / GID - это те, которые указаны в контейнере + значение в /etc/subuid & /etc/subgid. Таким образом, ваш "контейнер root" на вашем хосте - 165536, а пользователь jenkins - 166536 (165536 + 1000).

Чтобы вернуться к вашему примеру, вам нужно сделать

$ mkdir -p /abc/home_folder_for_jenkins
$ chown -R 166536:166536 /abc/home_folder_for_jenkins
1 голос
/ 19 февраля 2020

Пространства имен пользователя смещают UID / GID пользователя внутри контейнера и любые файлы внутри контейнера. Не существует сопоставления UID / GID внутри контейнера с UID / GID внешнего хоста (что противоречит цели). Поэтому вам потребуется смещение UID / GID создаваемого каталога или просто использовать именованный том и позволить docker обработать это для вас. Я считаю, что UID / GID на хосте будет 166536 (165536 + 1000) (у меня там может быть отключено по одному, поэтому попробуйте открыть права доступа к каталогу, если это по-прежнему не удается, и посмотрите, что создается).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...