#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 useradd5.Если вы используете 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
помощью inadduser
, потому что 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-метод)