Docker UID/GID
По умолчанию внутри Docker-контейнера процесс запускается с UID/GID 0:0, что соответствует пользователю и группе root:root. Из этого вытекает два свойства:
- Владелец создаваемых в примонтированых директориях файлов root. Для изменения/удаления этих файлов приходиться использовать sudo.
- Нет возможности использовать внутри контейнера 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
Эта идея подсмотрена здесь. Более подробная статья на эту тему тут.