У меня есть докер-контейнер с некоторыми процессами (uwsgi и сельдерей), работающими внутри. Я хочу создать пользователя celery и пользователя uwsgi для этих процессов, а также рабочую группу, к которой они оба будут принадлежать, для назначения разрешений.
Я попытался добавить RUN adduser uwsgi
и RUN adduser celery
в свой Dockerfile, но это вызывает проблемы, так как эти команды запрашивают ввод (я разместил ответы из сборки ниже).
Каков наилучший способ добавления пользователей в контейнер Docker, чтобы установить разрешения для рабочих, работающих в контейнере?
Мой образ 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]
источник
useradd --create-home --shell /bin/bash
является более понятным / читаемым для коллег.RUN echo 'newuser:newpassword' | chpasswd
--no-log-init
возможностьюuseradd
.USER newuser
. Если вам также нужно, чтобы у пользователя были права root, вы также можете включитьadduser <username> sudo
./bin/sh: useradd: not found
альпийский linuxЧтобы избежать интерактивных вопросов от adduser, вы можете вызвать его с помощью следующих параметров:
--gecos
Параметр используется для установки дополнительной информации. В этом случае он просто пуст.В системах с busybox (например, Alpine) используйте
Смотрите Занятый Adduser
источник
adduser
высокоуровневое решение обычно предпочитают использовать низкоуровневые функции, такие какuseradd
.adduser: unrecognized option: gecos
Похоже, это не работает на Alpine.Ubuntu
Попробуйте следующие строки в
Dockerfile
:useradd
варианты (см .man useradd
:):-r
,--system
Создание учетной записи системы. смотрите: Последствия создания системных учетных записей-m
,--create-home
Создать домашний каталог пользователя.-d
,--home-dir HOME_DIR
Домашний каталог новой учетной записи.-s
,--shell SHELL
Логин оболочки нового аккаунта.-g
,--gid GROUP
Имя или идентификатор первичной группы.-G
,--groups GROUPS
Список дополнительных групп.-u
,--uid UID
Указать идентификатор пользователя. смотрите: Понимание того, как uid и gid работают в контейнерах Docker-p
,--password PASSWORD
Зашифрованный пароль новой учетной записи (напримерubuntu
).Установка пароля пользователя по умолчанию
Чтобы установить пароль пользователя, добавьте
-p "$(openssl passwd -1 ubuntu)"
вuseradd
команду.Или добавьте следующие строки в ваш
Dockerfile
:Первая инструкция оболочки состоит в том, чтобы убедиться, что
-o pipefail
опция включена перед тем,RUN
как в ней есть канал. Читайте больше: Hadolint: Linting ваш Dockerfile .источник
root
Группа не указывает, что у них есть root-доступ, просто у них больше прав на чтение некоторых файлов (например, журналов), что полезно, но это зависит от проекта.Добавление пользователя в Docker и запуск вашего приложения под этим пользователем - очень хорошая практика с точки зрения безопасности. Для этого я бы порекомендовал следующие шаги:
Выше приведен полный пример копирования файлов проекта NodeJS, создания группы пользователей и пользователя, назначения пользователю разрешения для папки проекта, переключения на вновь созданного пользователя и запуска приложения под этим пользователем.
источник
Вы можете имитировать Dockerfile с открытым исходным кодом, например:
Узел: узел 12-github
суперсет: суперсет-github
Я думаю, что это хороший способ следовать открытым исходным кодом.
источник
У каждого есть свой личный фаворит, а это мой
Ссылка: man useradd
RUN
Линия добавит пользователя и группуapp
:Используйте более конкретное имя, чем
app
если изображение будет использоваться в качестве базового изображения. Кроме того, включите,--shell /bin/bash
если вам действительно нужно.Частичный кредит: ответ Райана М
источник
В качестве альтернативы вы можете сделать это.
Первая команда создает группу под названием demo . Вторая команда создает демо- пользователя и добавляет его в ранее созданную демо- группу.
Флаги означает:
источник
Добавьте эту строку в ваш Dockerfile (таким образом вы можете запустить любую команду linux)
источник