Добавить пользователя в контейнер Docker



у меня есть контейнер docker с некоторыми процессами (uwsgi и сельдерей), работающими внутри. Я хочу создать пользователя сельдерея и пользователя uwsgi для этих процессов, а также рабочую группу, к которой они оба будут принадлежать, чтобы назначить разрешения.



Я пробовал добавлять RUN adduser uwsgi и RUN adduser celery в мой Dockerfile, но это вызывает проблемы, так как эти команды запрашивают ввод (я опубликовал ответы из сборки ниже).



что является лучшим способом, чтобы добавить пользователей в Контейнер Docker, чтобы установить разрешения для рабочих, работающих в контейнере?



мой образ Докера построен из официальной базы Ubuntu14.04.



вот вывод из Dockerfile при выполнении команд adduser:



Adding user `uwsgi' ...
Adding new group `uwsgi' (1000) ...
Adding new user `uwsgi' (1000) with group `uwsgi' ...
Creating home directory `/home/uwsgi' ...
Copying files from `/etc/skel' ...
[91mEnter new UNIX password: Retype new UNIX password: [0m
[91mpasswd: Authentication token manipulation error
passwd: password unchanged
[0m
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564.
[0m
Try again? [y/N]
Changing the user information for uwsgi
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []: Work Phone []: Home Phone []: Other []:
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
[0m
Is the information correct? [Y/n]
---> 258f2f2f13df
Removing intermediate container 59948863162a
Step 5 : RUN adduser celery
---> Running in be06f1e20f64
Adding user `celery' ...
Adding new group `celery' (1001) ...
Adding new user `celery' (1001) with group `celery' ...
Creating home directory `/home/celery' ...
Copying files from `/etc/skel' ...
[91mEnter new UNIX password: Retype new UNIX password: [0m
[91mpasswd: Authentication token manipulation error
passwd: password unchanged
[0m
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564.
[0m
Try again? [y/N]
Changing the user information for celery
Enter the new value, or press ENTER for the default
Full Name []: Room Number []: Work Phone []:
Home Phone []: Other []:
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
[0m
Is the information correct? [Y/n]
599   5  

5 ответов:

фокус в том, чтобы использовать useradd вместо интерактивной оболочки adduser. Я обычно создаю пользователей с помощью:

RUN useradd -ms /bin/bash newuser

который создает домашний каталог для пользователя и гарантирует, что bash является оболочкой по умолчанию.

затем вы можете добавить:

USER newuser
WORKDIR /home/newuser

в свой файла Docker. Каждая команда после этого, а также интерактивные сеансы будут выполняться как пользователь newuser:

docker run -t -i image
newuser@131b7ad86360:~$

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

использование непривилегированных пользователей внутри контейнеров является хорошей идеей по соображениям безопасности. Он также имеет несколько недостатков. Самое главное, что люди, получающие изображения из вашего изображения, должны будут переключиться обратно в root, прежде чем они смогут выполнять команды с привилегиями суперпользователя.

чтобы избежать интерактивных вопросов от adduser, вы можете вызвать его с помощью следующих параметров:

RUN adduser --disabled-password --gecos '' newuser

The --gecos параметр используется для установки дополнительной информации. В этом случае он просто пуст.

в системах с busybox (например, Alpine) используйте

RUN adduser -D -g '' newuser

посмотреть busybox adduser

Ubuntu

попробуйте следующие строки в Dockerfile:

RUN useradd -d /home/ubuntu -ms /bin/bash -g root -G sudo -p ubuntu ubuntu
USER ubuntu
WORKDIR /home/ubuntu

useradd "параметры" (см.: man useradd):

  • -d,--home-dir HOME_DIR домашний каталог новой учетной записи.
  • -m,--create-home создать домашний каталог пользователя.
  • -s,--shell SHELL войти в оболочку новой учетной записи.
  • -g,--gid GROUP имя или идентификатор основной группы.
  • -G,--groups GROUPS список доп группы.
  • -p,--password PASSWORD зашифрованный пароль новой учетной записи (например,ubuntu).

добавьте эту строку в свой Dockerfile (вы можете запустить любую команду linux таким образом)

RUN useradd -ms /bin/bash yourNewUserName

Это еще один пример (в случае, если у вас есть какой-то сетевой каталог active)

(sudo groups || groups) | grep docker || echo 'Could not find docker group, consider: groupadd docker; gpasswd -a ${USER} docker; service docker.io restart; service docker restart; newgrp docker; nscd -i group'

и просто создание пользователя с некоторыми полезными группами

useradd -g cdrom,floppy,audio,dip,video,plugdev,netdev,lpadmin,scanner,bluetooth,docker --create-home --shell $SHELL gitlabuser

Comments

    Ничего не найдено.