2016-09-20 65 views
7

我試圖在構建期間在Docker容器中設置環境變量,但沒有成功。使用運行命令時設置它們,但我需要在構建過程中設置它們。如何在Docker中構建期間設置環境變量

Dockerfile

FROM ubuntu:latest 
ARG TEST_ENV=something 

命令我使用的是建立

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

運行

docker run -dit myimage 

我用

docker exec containerid printenv 
0123檢查可用的環境變量

,其結果是

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

回答

17

ARG是用於設置是在docker build過程中使用的環境變量 - 它們不存在最後的圖像,這就是爲什麼你不當你使用docker run時不會看到它們。

您使用ARG進行設置,這些設置僅在圖像生成時相關,並且不需要您從圖像運行的容器。您可以使用ENV來在構建期間和容器中使用evnvironment變量。

有了這個Dockerfile:

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

您可以覆蓋構建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=/ 
+0

使用'ENV'添加的環境變量,但使用'搬運工建立-t臨時--build-ARG BUILD_TIME = def'打印「一個或多個集結ARGS [BUILD_TIME]是沒有消耗,失敗的構建。「。 有助於單獨添加'ARG BUILD_TIME_ARG =默認值'和'ENV BUILD_TIME = $ BUILD_TIME_ARG'。你能將它添加到你的答案嗎? 感謝您的幫助。 –

+0

我剛剛意識到你可以用'ENV'命名'ARG'。 'ARG BUILD_TIME =默認'ENV BUILD_TIME = $ BUILD_TIME' –

+0

具有諷刺意味的是,埃爾頓的答案並不正確。邁克爾的最後一條評論點擊了頭部,並展示瞭如何通過構建實際設置環境變量(撰寫本文時)。 –