如何在构buildDockerfile时使用Docker机器的环境variables

当创build一个新的镜像时,我的Dockerfile需要调用npm install。 这也需要在代理之后工作。 在这一点上,以下Dockerfile代码工作:

# Set proxy server ENV http_proxy http://myproxy.example ENV https_proxy http://myproxy.example # run NPM install RUN npm install --production 

然而,我想我可以将ENVvariables设置为与我设置的泊坞窗机器相同

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

即我想npm安装命令使用这些环境variables。 这将确保该Dockerfile的图像可以在任何具有可用代理设置的环境中构build。

我已经使用该命令将创build的机器设置为env

 docker-machine env --no-proxy dock 

http_proxy和类似的variables是你不需要在Dockerfile中指定的预定义参数 :

Docker拥有一组预定义的ARGvariables,您可以在Dockerfile中使用没有相应的ARG指令的variables。

  • HTTP_PROXY
  • HTTP_PROXY
  • HTTPS_PROXY
  • https_proxy
  • FTP_PROXY
  • ftp_proxy这
  • NO_PROXY
  • NO_PROXY

要使用它,只需将其作为构buildparameter passing给:

 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因为这可能会对您运行图像的其他位置产生负面影响。

AFAIK这是不可能的你想要的方式。 您在docker机器中设置的环境variables是用于docker引擎推/拉图像等,不能被引用。

你可以做的是使用ARG指令,这个指令在Dockerfile( Link )里面就像一个variables一样处理。 这使您可以通过docker build命令传递variables

例如,您可以通过以下方式使用它:

 # define proxy variable ARG proxy # set proxy ENV http_proxy=$proxy ENV https_proxy=$proxy # run NPM install RUN npm install --production 

所以,当你build立图像,你可以通过代理docker build -t [ImageName] --build-arg proxy=http://myproxy.example [ProjectDir]