2017-10-20 215 views
0

創建新映像時,我的Dockerfile需要調用npm install。這需要在代理的後面工作。此時下面Dockerfile代碼工作:如何在構建Dockerfile時使用Docker機器的環境變量

# Set proxy server 
ENV http_proxy http://myproxy.example 
ENV https_proxy http://myproxy.example 

# run NPM install 
RUN npm install --production 

我卻想,我可以設置ENV變量一樣,在泊塢窗機我已經建立了與

docker-machine create \ 
-d virtualbox \ 
--engine-env HTTP_PROXY=http://myproxy.example \ 
--engine-env HTTPS_PROXY=http://myproxy.example \ 
dock 

即我會就像npm install命令使用這些環境變量一樣。這將確保此Dockerfile的圖像可以在任何具有可用代理設置的環境中構建。

我已經設置了創建機器ENV用命令

docker-machine env --no-proxy dock 

回答

3

通代理http_proxy和類似的變量是predefined args,你不需要指定你Dockerfile:

泊塢窗有一組預定義的ARG變量,您可以在Dockerfile中使用相應的ARG指令而不使用 。

  • HTTP_PROXY
  • HTTP_PROXY
  • HTTPS_PROXY
  • https_proxy
  • FTP_PROXY
  • ftp_proxy這
  • NO_PROXY
  • NO_PROXY

要使用它,你只需把它作爲一個構建ARG:

docker build \ 
    --build-arg http_proxy=http://myproxy.example \ 
    --build-arg https_proxy=http://myproxy.example \ 
    . 

爲了您npm install線,他們可能已經在你的環境中,如果沒有,你應該能夠使用:

RUN http_proxy=$http_proxy https_proxy=$https_proxy npm install --production 

請注意,您不應將它們放在圖像ENV中,因爲這可能會對您運行圖像的其他位置產生負面影響。

1

AFAIK這是不可能的,你希望它是的方式。您在碼頭機中設置的環境變量是用於碼頭引擎推/拉圖像等,並且不能被引用。

你可以做的是使用ARG指令,該指令在Dockerfile(Link)中像一個變量一樣處理。這使您可以傳遞變量與docker build命令

例如,你可以通過以下方式來使用它:

# define proxy variable 
ARG proxy 

# set proxy 
ENV http_proxy=$proxy 
ENV https_proxy=$proxy 

# run NPM install 
RUN npm install --production 

所以,當你建立圖像,你可以用docker build -t [ImageName] --build-arg proxy=http://myproxy.example [ProjectDir]