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

我在有防火墙的公司环境下工作,大多数情况下我需要代理来访问外部来更新包

而我想保持相同的Dockerfile在公司内部/外部构build。

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过程中如何实现这一点?

请注意,此function已添加到docker> = 1.9.0 https://github.com/docker/docker/issues/14634

Dockerfile中不能有逻辑,但是Dockerfile可以在构build时ADD一个脚本(在shell,python中)并RUN该脚本。

请注意,这样做会使Dockerfile更难以被其他人理解,他们不会怀疑根据上下文构build不同的图像。 你最好在RUN命令之前在Dockerfile中写一个清晰的注释。

http代理构build图像时

现在,如果你唯一的问题是代理,你不应该在你的Dockerfile中处理这些事情。 而是使用HTTP_PROXY环境variables集运行Docker守护进程。 (关于这个问题有回答的问题)

运行容器时的http代理

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