Добавить пользователя в контейнер 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]
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 '' newuserThe
--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