2017-10-20 213 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]