存储和恢复继承的 Dockerfile 用户设置

Elm*_*ber 5 docker dockerfile

我正在寻找如何从 Dockerfile 中继承的 docker 映像存储和恢复 USER。例如,我的父映像指定默认服务并将 USER 设置为 serviceuser。

现在我有一个从父映像继承的依赖映像,以 root 身份进行了一些修改,但希望将 docker 映像用户保留为 serviceuser。

我可以手动执行此操作:

父 Dockerfile:

from default
USER serviceuser
ENTRYPOINT ["some-service"]
Run Code Online (Sandbox Code Playgroud)

其他 Dockerfile:

from parent
USER root
RUN apt-get install -y cool-stuff
USER serviceuser
Run Code Online (Sandbox Code Playgroud)

但是,这样当我更改父级中的用户时,我必须更新所有子图像。有没有办法在子 Dockerfile 中动态地执行此操作?

我想到的其他选项是在子脚本中使用 sudo 或以 root 身份运行入口点(即不设置 USER)并在启动脚本中执行服务用户切换。但两者都有安全隐患。

小智 6

如果您是父图像的作者,您可以这样做:

ENV serviceuser=foo
RUN useradd $serviceuser
USER $serviceuser
Run Code Online (Sandbox Code Playgroud)

儿童图像:

USER root
RUN apt-get install -y cool-stuff
USER $serviceuser
Run Code Online (Sandbox Code Playgroud)

  • 如果您不是父映像的作者并且 USER 未存储在 ENV 变量中,答案是什么? (5认同)