如何在构建Dockerfile时使用Docker机器的环境变量
问题描述:
创建新映像时,我的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
答
通代理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
中,因为这可能会对您运行图像的其他位置产生负面影响。
答
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]