首页 > 解决方案 > 我可以在 Dockerfile 中创建一个临时变量并在以后重用它吗?

问题描述

在我的 Dockerfile 中,我想暂时切换到 root,然后再切换回原始用户。

originalUser=`RUN whoami`

USER root
RUN apk update
RUN apk add curl

# switch back to the user before root
USER $originalUser

是否可以在 Dockerfile 中做这样的事情?

标签: dockerdockerfile

解决方案


一方面,不,没有这样的事。唯一相似的东西是ARG(在命令行中传递)和ENV(它们是固定字符串),它们都不能根据命令输出动态设置。

另一方面,在 Docker 映像的上下文中,作为 Dockerfile 的作者,您可以完全和绝对地控制映像中的内容。您永远不必问诸如“如果用户有不同的用户名怎么办”或“如果他们想安装到不同的路径怎么办”之类的问题:您可以为这些东西选择固定值。我会建议:

  • 如果您正在安装单个二进制文件或具有“正常”安装过程的东西(它具有 Autoconf 样式./configure --prefix=...选项),请将其安装到系统目录中
  • 如果您正在使用不进入“正常”目录的脚本语言安装某些东西,那么/app它是一个常见的地方
  • 以 root 身份安装软件(甚至是您的应用程序);在 Dockerfile 结束时切换到非 root 用户USER一次
  • 不要试图镜像任何特定系统的目录布局、用户名或数字用户 ID;如果您尝试在其他地方运行图像,它们将不匹配

如果您尝试扩展其他图像,您应该很好地确定它使用的用户名并将固定字符串放在USER派生图像的 Dockerfile 末尾的目录中。


推荐阅读