如何在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。