Похоже, что родительское изображение, которое я использую, требует 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
выполняются во время выполнения, но она все еще не объясняет всю картину и последовательности из сборки, иначе было бы понятно, что мне нужно делать.