Как добавить пользователя с помощью dockerfile?

#docker #dockerfile

#docker #dockerfile

Вопрос:

Как я могу добавить пользователя с помощью Dockerfile — следующее не работает.

 USER vault
WORKDIR /usr/local/bin/vault
  

Мой полный Dockerfile:

 FROM alpine:3.4
RUN apk update amp;amp; apk add curl unzip
RUN useradd -ms /bin/bash vault

USER vault
WORKDIR /usr/local/bin/vault
ADD /vault.hcl /etc/vault/vault.hcl

RUN curl -SL https://releases.hashicorp.com/vault/0.5.0/vault_0.5.0_linux_amd64.zip > vault.zip
RUN unzip vault.zip -d /usr/local/bin amp;amp; rm vault.zip
  

Ответ №1:

Используйте useradd вместо его интерактивного adduser для добавления пользователя.

 RUN useradd -ms /bin/bash  vault
  

Приведенная ниже команда не создаст пользователя.

 USER vault
WORKDIR /usr/local/bin/vault
  

он будет использовать vault user

пожалуйста, обратитесь к документации пользователя Dockerfile

Инструкция ПОЛЬЗОВАТЕЛЯ задает имя пользователя или UID для использования при запуске образа и для любых инструкций RUN, CMD и ENTRYPOINT, которые следуют за ним в Dockerfile.

ПРИМЕЧАНИЕ: гарантирует, что bash это оболочка по умолчанию.

Если оболочка по умолчанию /bin/sh , вы можете сделать следующее:

 RUN ln -sf /bin/bash /bin/sh
RUN useradd -ms /bin/bash  vault
  

Комментарии:

1. Покажите свой Dockerfile и строку FROM

2. FROM alpine:3.4 RUN apk update amp;amp; apk add curl unzip RUN useradd -ms /bin/bash vault USER vault WORKDIR /usr/local/bin/vault ADD /vault.hcl /etc/vault/vault.hcl RUN curl -SL https://releases.hashicorp.com/vault/0.5.0/vault_0.5.0_linux_amd64.zip > vault.zip RUN unzip vault.zip -d /usr/local/bin amp;amp; rm vault.zip

3. попробуйте последнюю часть моего ответа

4. useradd команда отсутствует в вашем базовом образе alpine . я не знаю об этом образе, но он будет работать в ubuntu, centos и т. Д. изображениях. я тестировал с помощью FROM ubuntu:14.04 . do google о команде alpine useradd

5.Если вы используете alpine, вы должны добавить группу пользователей и adduser RUN addgroup -g ${GROUPID} -S ${USERNAME} RUN adduser -S -G ${USERNAME} -u ${USERID} -s /bin/bash -h ${USER_HOME} ${USERNAME}

Ответ №2:

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

 FROM <base image>
RUN groupadd -g 2000 go 
amp;amp; useradd -m -u 2001 -g go go
USER go
  

или

 RUN addgroup -g 1001 -S appuser amp;amp; adduser -u 1001 -S appuser  -G appuser 
  

Комментарии:

1. Когда я выполняю эти шаги при использовании образа selenium docker в качестве базового образа, сборка проходит успешно, но когда я запускаю свой образ, он говорит, что groupadd: GID 2000 уже существует. Я пробовал использовать разные идентификаторы, и та же ошибка сохраняется. Могу ли я как-нибудь решить эту проблему? Спасибо

2. Какой образ selenium docker вы используете?

3. elgalu / selenium: последняя версия

4. Привет, я не смог воспроизвести эту ошибку! Просто для проверки попробуйте изображение centos: 7 . Вы увидите, что эти шаги работают хорошо. Когда я устанавливаю elgalu / selenium: latest, я получаю сообщение «groupadd: отказано в разрешении. groupadd: не удается заблокировать /etc/group; повторите попытку позже «. Это происходит потому, что только пользователь root может создать нового пользователя

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

Ответ №3:

Если вы также хотите, чтобы у вашего пользователя был пароль, используйте его для Alpine based-images:

 FROM alpine
ARG USER=usernameThatYouWant
ARG PASS="some password"
RUN adduser -D $USER amp;amp; echo "$USER:$PASS" | chpasswd
  
  • ARG Строки есть, поэтому вы можете (необязательно) выбрать другое имя пользователя и пароль при создании образа (без необходимости изменять Dockerfile).
  • -D так что adduser пароль пока не устанавливается.
    Без этой опции adduser он станет интерактивным и запросит пароль. Он не принимает это из обычного стандартного интерфейса, поэтому передача пароля также не является вариантом.
  • echo "$USER:$PASS" | chpasswd чтобы окончательно установить пароль.
  • Обратите внимание, что я не устанавливаю оболочку с -s /path/to/some/shell помощью in adduser , потому что Alpine имеет только ash и sh доступен. В любом случае, оба они являются просто символическими busybox ссылками.
    (Но если вы собираетесь установить другую оболочку в свой образ, вы, вероятно, захотите ее использовать.)

Для образов на основе Ubuntu используйте это:

 FROM ubuntu
ARG USER=usernameThatYouWant
ARG PASS="some password"
RUN useradd -m -s /bin/bash $USER amp;amp; echo "$USER:$PASS" | chpasswd
  

Я использую:

  • useradd потому что здесь это программа для неинтерактивного использования.
  • -m так что у нас у пользователя есть домашний каталог.
  • -s /bin/bash чтобы у пользователя был bash в качестве оболочки по умолчанию.

(Для большинства других базовых образов вам также потребуется использовать Ubuntu-метод)