如何在Dockerfile中获取环境变量值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (64)

我正在构建一个Ruby应用程序的容器。我的应用程序的配置包含在环境变量中(使用dotenv在应用程序中加载)。

其中一个配置变量是应用程序的公共IP地址,它在内部用于建立链接。我需要添加一个dnsmasq条目,将该ip指向容器内的127.0.0.1,以便它可以获取应用程序的链接,就好像它不是容器化的。

因此ENV,我试图在我的Dockerfile中设置一个将环境变量传递给容器的Dockerfile。

我尝试了几件事情。

ENV REQUEST_DOMAIN $REQUEST_DOMAIN
ENV REQUEST_DOMAIN `REQUEST_DOMAIN`

尽管如此,一切都通过了“REQUEST_DOMAIN”字符串,而不是环境变量的值。有没有办法将环境变量值从主机传递给容器?

提问于
用户回答回答于

你应该在你的Dockerfile中使用这个ARG指令来实现这个目的。

ARG指令定义了一个变量,用户可以在构建时通过使用--build-arg <varname>=<value>标志的docker build命令将其传递给构建器。

所以你的Dockerfile会有这样的一行:

ARG request_domain

或者如果你更喜欢默认值:

ARG request_domain=127.0.0.1

现在你可以在你的Dockerfile中引用这个变量:

ENV request_domain=$request_domain

那么你会像这样构建你的容器:

$ docker build --build-arg request_domain=mydomain Dockerfile

注意:如果ARG在Dockerfile中引用了一个,但是将其排除在外,则你的图像不会生成--build-arg

用户回答回答于

所以你可以:cat Dockerfile | envsubst | docker build -t my-target -

然后拥有一个Dockerfile,其内容如下:

ENV MY_ENV_VAR $MY_ENV_VAR

扫码关注云+社区