如何区分Dockerfile中的Build和Run?

时间:2018-06-12 07:56:42

标签: docker docker-compose dockerfile

我需要在构建容器期间设置代理环境变量。但是,当容器运行时,不能设置代理环境变量。

我在Dockerfile中使用了ENV命令来设置变量。但是这会在构建和运行容器期间设置变量。据我所知,Dockerfile不支持ENV命令的未设置。

如何为构建指定环境而不是为运行指定环境?

2 个答案:

答案 0 :(得分:1)

您需要使用的是构建arg,它不会保留在图像中。文档部分Set build-time variables (--build-arg)准确描述了您的需求:

  

您可以在Dockerfile中使用ENV指令来定义变量   值。这些值在构建的图像中保留。但是,经常   持久性不是你想要的。用户想要指定变量   不同,取决于他们在哪个主机上建立图像。

     

一个很好的例子是http_proxy或用于提取的源版本   中间文件。 ARG指令允许Dockerfile作者定义   用户可以使用--build-arg标志在构建时设置的值:

FROM alpine

ARG hello
RUN env # This will output hello=world

CMD env # When running the container, there is not env variable "hello"
docker build --build-arg hello=world -t test . # This will output hello=world env variable
docker run test # There is no env variable "hello"

如上所示,hello仅在构建时显示为env变量。它不会保留在图像中,因此不会显示在docker run

答案 1 :(得分:0)

为什么不将变量设置为空或为空?它仍然存在,但在运行时

中没有你可以考虑的值