在Docker中构build期间如何设置环境variables

我试图在Docker容器中设置环境variables,但没有成功。 使用运行命令时设置它们,但我需要在构build期间设置它们。

Dockerfile

FROM ubuntu:latest ARG TEST_ENV=something 

我用来构build的命令

 docker build -t --build-arg TEST_ENV="test" myimage . 

运行

 docker run -dit myimage 

我通过使用检查可用的环境variables

 docker exec containerid printenv 

结果是

 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=e49c1abfd58b TERM=xterm no_proxy=*.local, 169.254/16 HOME=/root 

TEST_ENV不存在

ARG用于设置在docker build过程中使用的环境variables – 它们不存在于最终映像中,这就是为什么当您使用docker run时看不到它们的原因。

您使用ARG进行设置,这些设置只在构build图像时才相关,而不是由图像运行的容器所需。 您可以使用ENV在evnvironmentvariables在构build和容器中使用。

有了这个Dockerfile:

 FROM ubuntu ARG BUILD_TIME=abc ENV RUN_TIME=123 RUN touch /env.txt RUN printenv > /env.txt 

你可以像使用docker build -t temp --build-arg BUILD_TIME=def . build一样覆盖构build参数docker build -t temp --build-arg BUILD_TIME=def . 。 然后你得到你所期望的:

 > docker run temp cat /env.txt HOSTNAME=b18b9cafe0e0 RUN_TIME=123 HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin BUILD_TIME=def PWD=/