【发布时间】:2019-06-21 00:30:15
【问题描述】:
我使用的父图像似乎需要 root 访问权限才能运行其ENTRYPOINT 指令。
在我的Dockerfile 中,最后我需要用普通用户运行我自己的容器(可执行文件)。这里如何在用户之间来回切换?
伪 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 如何执行高级指令? .它如何与父 Dockerfile 的层次结构交互。看起来它从父 docker 文件中导入指令;创建一个 docker 文件。无论如何它会重新排序指令吗?
通过docker run 执行的运行时会发生什么?我知道RUN 命令在构建时使用,而CMD 和ENTRYPOINT 在运行时执行,但它仍然不能解释整个图片和构建序列,否则我需要做什么就很清楚了。
【问题讨论】:
-
您需要设置自己的 ENTRYPOINT 来覆盖父项。
-
那它不会跳过父母 ENTRYPOINT 吗?
Only the last ENTRYPOINT instruction in the Dockerfile will have an effect.docs.docker.com/engine/reference/builder/#entrypoint -
是的。您不能添加自己的命令来运行,docker 只启动一个进程。如果父母入口点做了一些重要的事情,您可能需要在启动脚本中自己设置所有内容。
-
所以我不能有一个容器,如果 apache http 是父图像,我可以说 apache http 和我自己的服务运行?现在我想到了,这可能是容器化的重点。你知道任何解释构建/执行过程的好文档吗?究竟什么时候调用父入口点?执行顺序是什么等
-
Docker 启动 1 个进程,但该进程可能是进程管理器,即 supervisord,它本身启动 n 个进程,参考。 docs.docker.com/config/containers/multi-service_container - 我不同意@tkausl。
标签: docker dockerfile