Docker - сбой выполнения родительского образа из-за отсутствия корневого доступа - PullRequest
0 голосов
/ 21 июня 2019

Похоже, что родительское изображение, которое я использую, требует root-доступа для выполнения инструкции ENTRYPOINT.

В моем Dockerfile мне нужно запустить свой собственный контейнер (исполняемый файл) с обычным пользователем в конце.Как мне переключаться между пользователями здесь?

Psuedo Dockerfile:

FROM parentrepo/parentimg # its Dockerfile probably has ENTRYPOINT at the end which requires root access
#my app specific instructions
WORKDIR ..
RUN mkdir ..
COPY ..
RUN tar ..
EXPOSE 9000
USER nir # HEre i want to switch user to nir
WORKDIR ${myhome}
CMD ["/bin/bash", "-c", "./start"]

Запуск выше не выполняется, так как родитель требует доступа sudo.если я не делаю USER nir, тогда мой процесс начинается как пользователь root, которого я не хочу.Должен ли родительский Dockerfile иметь здесь USER root?

Кроме того, есть ли документ, описывающий, как docker Build выполняет инструкции на высоком уровне?,Как это взаимодействует с иерархиями родительских Dockerfiles.Похоже, он импортирует инструкции из родительских файлов Docker;создает один файл Docker.Это как-то переупорядочивает инструкцию?

И что происходит во время выполнения, которое выполняется через docker run?Я знаю, что команда RUN используется во время сборки, в то время как CMD и ENTRYPOINT выполняются во время выполнения, но она все еще не объясняет всю картину и последовательности из сборки, иначе было бы понятно, что мне нужно делать.

1 Ответ

0 голосов
/ 21 июня 2019

Вы должны создать пользователя nir внутри этого образа, а также предоставить соответствующие права и права для выполнения этого сценария ./start.

Вот что я пробовал, и это сработало.

  • Создано Dockerfile со следующим содержимым
FROM alpine
WORKDIR /
#RUN useradd -ms /bin/bash nir <= (This will work for non-alpine images)
RUN addgroup -S appgroup && adduser -S nir -G appgroup
COPY . /
RUN chown nir:appgroup /start.sh
RUN chmod +x /start.sh
USER nir
CMD ["/bin/sh", "-c", "/start.sh"]
  • Содержимое сценария start.sh.
#!/bin/sh
echo "hello" > /tmp/abc.txt
sleep 100
exec "$@"
  • Сборка изапустите контейнер.
$ docker run -itd  t:t .
$ docker run -itd  t:t
$ docker exec -it de11dbffb2ca sh
/ $ ls /tmp/abc.txt
/tmp/abc.txt
/ $ cat /tmp/abc.txt
hello
/ $ ls -ltrh /tmp/
total 4K
-rw-r--r--    1 nir      appgroup       6 Jun 21 04:35 abc.txt
/ $

Как видите, скрипт start.sh успешно выполнен пользователем nir.Здесь мы только что создали соответствующего пользователя, используя adduser для изображения на альпийской основе (или используем useradd для изображений не-альпийских).При наличии соответствующего разрешения для сценария с использованием chown и chmod.

Надеюсь, это поможет, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...