我在有防火墙的公司环境中工作,我需要代理才能访问外部以更新软件包
虽然我想保持在公司内部/外部构建相同的Dockerfile。
FROM ubuntu:latest
# for inside
RUN echo 'Acquire::http::Proxy "http://<proxy>";' > /etc/apt/apt.conf
# for external
#RUN echo '#Acquire::http::Proxy "http://<proxy>";' > /etc/apt/apt.conf
RUN apt-get update
如何在docker build
期间实现这一目标?
答案 0 :(得分:2)
你不能在Dockerfile中拥有逻辑,但你的Dockerfile可以ADD
脚本(在shell,python,...中)和RUN
在构建时编写脚本。
请注意,执行此操作会使其他人更难理解您的Dockerfile,这些人不会怀疑要根据上下文构建不同的图像。您最好在RUN
命令之前在Dockerfile中写一个清晰的注释。
现在,如果您的唯一问题是使用代理,那么您不必在Dockerfile中处理这些问题。而是使用HTTP_PROXY
环境变量集运行Docker守护程序。 (关于这个问题有回答的问题)
通过使用-e
命令的docker run
选项将环境变量注入容器,可以告诉容器运行的进程使用http代理。
请参阅容器中运行的命令文档,以发现它是否服从HTTP_PROXY
环境变量。请注意,某些进程需要小写的http_proxy
environnement变量。
答案 1 :(得分:1)
请注意,此功能已添加到docker&gt; = 1.9.0 https://github.com/docker/docker/issues/14634
中