在docker build期间如何在Dockerfile中支持http_proxy或逻辑控制?

时间:2014-07-02 01:24:03

标签: docker

我在有防火墙的公司环境中工作,我需要代理才能访问外部以更新软件包

虽然我想保持在公司内部/外部构建相同的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期间实现这一目标?

2 个答案:

答案 0 :(得分:2)

你不能在Dockerfile中拥有逻辑,但你的Dockerfile可以ADD脚本(在shell,python,...中)和RUN在构建时编写脚本。

请注意,执行此操作会使其他人更难理解您的Dockerfile,这些人不会怀疑要根据上下文构建不同的图像。您最好在RUN命令之前在Dockerfile中写一个清晰的注释。

构建图像时

http代理

现在,如果您的唯一问题是使用代理,那么您不必在Dockerfile中处理这些问题。而是使用HTTP_PROXY环境变量集运行Docker守护程序。 (关于这个问题有回答的问题)

运行容器时的http代理

通过使用-e命令的docker run选项将环境变量注入容器,可以告诉容器运行的进程使用http代理。 请参阅容器中运行的命令文档,以发现它是否服从HTTP_PROXY环境变量。请注意,某些进程需要小写的http_proxy environnement变量。

答案 1 :(得分:1)

请注意,此功能已添加到docker&gt; = 1.9.0 https://github.com/docker/docker/issues/14634