一尘不染

我如何在Docker中进行构建期间设置环境变量

docker

我正在尝试在构建期间在Docker容器中设置环境变量,但没有成功。使用run命令设置它们可以工作,但是我需要在构建期间进行设置。

Docker文件

FROM ubuntu:latest
ARG TEST_ENV=something

我正在使用的命令

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

跑步

docker run -dit myimage

我正在通过检查可用的环境变量

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不存在


阅读 292

收藏
2020-06-17

共1个答案

一尘不染

ARG用于设置在docker build过程中使用的环境变量-它们不会出现在最终图像中,这就是为什么在使用时看不到它们的原因docker run

您使用ARG的设置仅在构建映像时相关,而从映像运行的容器不需要使用这些设置。您可以使用ENVevnvironment变量在构建过程中和在容器中使用。

有了这个Dockerfile:

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

您可以像完成操作一样覆盖build arg 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=/
2020-06-17