创建新图像时,我的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的映像。
我已使用命令
将创建的机器设置为envdocker-machine env --no-proxy dock
答案 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]