Docker UID/GID

По умолчанию внутри Docker-контейнера процесс запускается с UID/GID 0:0, что соответствует пользователю и группе root:root. Из этого вытекает два свойства:

  1. Владелец создаваемых в примонтированых директориях файлов root. Для изменения/удаления этих файлов приходиться использовать sudo.
  2. Нет возможности использовать внутри контейнера SSH-ключи простым монтированием директории ~/.ssh. В целях безопасности SSH-клиент требует чтобы на файлах ключей стояли права 600 и владельцем файлов был пользователь запустившим клиент.

Решается эта проблема добавление в контейнер групп с ID равными 1001, 1000 и 2000 (самые распространенные ID групп пользователя рабочей станции), добавлением в пользователя включенным в эти группы, и указанием что процесс внутри контейнера должен запускаться под этим пользователем.

Пример для контейнеров на базе CentOS:

RUN groupadd g1001 --gid 1001 \
 && groupadd g1000 --gid 1000 \
 && groupadd g2000 --gid 2000 \
 && useradd --create-home --shell /bin/bash user --gid 1001 --groups g1000,g2000 \
 && printf "user:user" | chpasswd \
 && usermod --append --groups wheel user \
 && printf "user ALL= NOPASSWD: ALL\\n" >> /etc/sudoers
USER user
WORKDIR /home/user
ENV PATH=/home/user/.local/bin:${PATH} \
 CONAN_USER_HOME=/home/user

Эта идея подсмотрена здесь. Более подробная статья на эту тему тут.

Subscribe to Заметочки

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe