我可以在Dockerfile中创建一个临时变量并在以后重用它吗?

问题描述 投票:1回答:1

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

originalUser=`RUN whoami`

USER root
RUN apk update
RUN apk add curl

# switch back to the user before root
USER $originalUser

在Dockerfile中可以做这样的事吗?

docker dockerfile
1个回答
3
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.