#docker #docker-compose #dockerfile
#docker #docker-создать #dockerfile
Вопрос:
Я пишу Dockerfile, в котором я хочу создать пользователя и использовать его вместо root
user, потому что это рекомендуемая практика.
Я делаю следующее:
FROM python:3
WORKDIR /app
RUN adduser -D myuser
USER myuser
...
docker-compose up
выдает мне следующее сообщение об ошибке:
...
Option d is ambiguous (debug, disabled-login, disabled-password)
ERROR: Service 'webapp' failed to build: The command '/bin/sh -c adduser -D myuser' returned a non-zero code: 1
Этот -d
флаг часто используется (например, здесь) для создания пользователя в dockerfile, но я не могу понять, каким он должен быть, disabled-password
?
Ответ №1:
Он должен быть RUN adduser --disabled-login myuser
(или —disabled-password)
Ответ №2:
На самом деле вы должны использовать useradd
вместо adduser
….
Например:
RUN useradd -ms /bin/bash worker
Причина, по которой вы хотите использовать useradd
, заключается в том, что это НЕ интерактивное приглашение, запрашивающее вопросы и вводимые пользователем данные.
Кроме того, adduser
(Perl script) — это, по сути, оболочка вокруг useradd
команды.
Вывод: когда вы хотите автоматизированным способом создать нового пользователя, вы действительно хотите использовать useradd
.
Комментарии:
1. можете ли вы объяснить, почему?
2. @snoobdogg Извините, я действительно забыл об этом. Теперь он добавлен!
Ответ №3:
docker-compose up
Происходит сбой на этапе сборки. Когда docker пытается создать образ, он обнаруживает ошибку в строкеRUN adduser -D myuser
- https://linux.die.net/man/8/useradd . Вы можете прочитать руководство, что означают флаги.
- Снимите
-D
флаг, т. Е. измените команду наRUN adduser myuser
, будет добавлен новый пользователь, и сборка сможет перейти к следующему шагу. - Если вы хотите изменить значения по умолчанию
adduser
, вы можете прочитать использовать флаги в документах, опубликованных выше.
Комментарии:
1. Итак, снова
useradd
илиadduser
— это не то же самое.