Создать пользователя в Dockerfile: параметр d неоднозначен

#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 — это не то же самое.