如何在构建Dockerfile时使用docker机器的环境变量

时间:2017-10-20 11:48:14

标签: docker docker-machine docker-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

但是我希望我可以将ENV变量设置为与我设置的docker-machine相同

 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

2 个答案:

答案 0 :(得分:3)

karate.request和类似的变量是predefined args,您无需在Dockerfile中指定:

  

Docker有一组预定义的ARG变量,您可以不使用它们   Dockerfile中相应的ARG指令。

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

要使用它,只需将其作为构建参数传递给:

http_proxy

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

答案 1 :(得分:1)

AFAIK这不可能是您想要的方式。您在docker-machine中设置的环境变量是docker-engine用于推/拉图像等,无法引用。

你可以做的是使用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]

传递代理