0

创建新映像时,我的 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
4

2 回答 2

3

和类似的http_proxy变量是预定义的参数,您不需要在 Dockerfile 中指定:

Docker 有一组预定义的 ARG 变量,您可以在 Dockerfile 中没有相应的 ARG 指令的情况下使用这些变量。

  • HTTP_PROXY
  • http_proxy
  • HTTPS_PROXY
  • https_proxy
  • FTP_PROXY
  • ftp_proxy
  • NO_PROXY
  • no_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

请注意,您不应将它们放在图像中,ENV因为这可能会对您运行图像的其他位置产生负面影响。

于 2017-10-20T13:20:03.417 回答
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]

于 2017-10-20T13:10:05.410 回答