构建Dockerfile时如何使用docker机器的环境变量
How to use the environment variables of docker machine when building a Dockerfile
创建新图像时,我的 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-机器中相同的变量
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
据我所知,这不可能像您希望的那样。你在docker-machine设置的环境变量是给docker-engine到push/pull图片等的,不能引用
您可以使用 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]
传递代理
http_proxy
和类似的变量 predefined args 不需要在 Dockerfile 中指定:
Docker has a set of predefined ARG variables that you can use without
a corresponding ARG instruction in the Dockerfile.
- 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
,因为这可能会对您 运行 图片的其他位置产生负面影响。
创建新图像时,我的 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-机器中相同的变量 docker-machine create \
-d virtualbox \
--engine-env HTTP_PROXY=http://myproxy.example \
--engine-env HTTPS_PROXY=http://myproxy.example \
dock
即我希望 npm install 命令使用这些环境变量。这将确保可以在具有可用代理设置的任何环境中构建此 Dockerfile 的图像。
我已经使用命令
将创建的机器设置为envdocker-machine env --no-proxy dock
据我所知,这不可能像您希望的那样。你在docker-machine设置的环境变量是给docker-engine到push/pull图片等的,不能引用
您可以使用 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]
http_proxy
和类似的变量 predefined args 不需要在 Dockerfile 中指定:
Docker has a set of predefined ARG variables that you can use without a corresponding ARG instruction in the Dockerfile.
- 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
,因为这可能会对您 运行 图片的其他位置产生负面影响。