Запуск Docker-контейнера с пользователем, отличным от пользователя на хосте - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь развернуть образ на сервере Ubuntu. Проблема в том, что я хотел бы, чтобы в контейнере был пользователь, отличный от root. Другими словами, я хотел бы запустить контейнер под этим пользователем.

То, что я пробовал. Я успешно создал пользователя в моем контейнере с изображением. Я попытался запустить контейнер с помощью команды запуска docker, которая оказалась неудачной.

Я попытался создать новый контейнер с пользователем, определенным внутри файла dockerfile, он также не удался.

root@juju_dev_server:/home/dev# sudo docker run -it --user dev d08d53c4d78b
docker: Error response from daemon: linux spec user: unable to find user dev: no matching entries in passwd file

.

Вот мой докер-файл

 FROM debian

RUN groupadd -g 61000 dev
RUN useradd -g 61000 -l -m -s /bin/false -u 61000 dev
USER dev

CMD ["bash"]



FROM java:8
EXPOSE 8080
ADD /target/juju-0.0.1.jar juju-0.0.1.jar
ENTRYPOINT ["java","-jar","juju-0.0.1.jar"]

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Как я это сделал, я использую Alpine, а не Ubuntu, но он должен работать нормально:

Создание и запуск в качестве пользователя с именем "developer"

Dockerfile

RUN /bin/bash -c "adduser -D -u 1000 developer"
RUN passwd -d developer

RUN chown -R developer /home/developer/.bash*

RUN echo "developer    ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/developer

ENTRYPOINT ["/entrypoint.sh"]
CMD ["bash"]

entrypoint.sh

# stuff I need running as root here. Then below runs a bash shell as "developer"
sudo -u developer -H bash -c "$@;"

Полагаю, вы захотите изменить свой ENTRYPOINT на CMD или аналогичный или записать его в свой entrypoint.sh, если хотите запустить java.

0 голосов
/ 14 мая 2019

Dockerfile, который вы показываете, создает два изображения.Первое - это обычное debian изображение с пользователем без полномочий root.Второй игнорирует первый и представляет собой несколько обычный образ Java.

Эти два шага необходимо выполнить для одного и того же изображения.Если бы я собирался написать ваш Dockerfile, он мог бы выглядеть так:

FROM java:8
EXPOSE 8080

# (Prefer COPY to ADD unless you explicitly want its
# auto-unpacking semantics.)
COPY /target/juju-0.0.1.jar juju-0.0.1.jar

# Set up a non-root user context, after COPYing content
# in.  (Prevents the application from overwriting
# itself as a useful security measure.)
RUN groupadd -g 61000 app
RUN useradd -g 61000 -l -m -s /bin/false -u 61000 app
USER app

# Set the main container command.  (Generally prefer
# CMD to ENTRYPOINT if you’re only using one; it makes
# both getting debugging shells and later adopting the
# pattern of an initializing entrypoint script easier.)
CMD ["java","-jar","juju-0.0.1.jar"]
...