如何让我的所有docker容器都使用我的代理?

时间:2015-03-16 13:38:19

标签: proxy docker

我在Debian Jessie上运行docker,它是公司代理的幕后黑手。为了能够下载泊坞窗图像,我需要将以下内容添加到我的/etc/defaults/docker

http_proxy="http://localhost:3128/"

我可以确认这是有效的。

但是,为了能够从容器中访问interwebz,我需要使用--net host启动所有会话,然后设置这些env变量:

export http_proxy=http://localhost:3128/
export https_proxy=https://localhost:3128/
export ftp_proxy=${http_proxy}

理想情况下,我希望容器不需要主机网络,而不知道代理(即容器中端口20,80,443的所有出站呼叫都通过主机的代理端口进行)。这可能吗?

如果失败了,是否可以进行站点设置,这将确保这些env变量在本地设置但从未作为图像的一部分导出?我知道我可以用--env http_proxy=...等传递这些东西,但这很笨拙。我希望它能够为系统上的所有用户工作,而不必使用别名。

(免责声明:我在https://superuser.com/posts/890196上问了这个问题,但目前docker问题的主页有点模棱两可。)

1 个答案:

答案 0 :(得分:7)

请参阅Proxy all the Containers

  

主机服务器运行一个运行代理的容器(在本例中为squid),可以执行透明代理。该容器有一些iptables规则,NAT流量进入代理服务器 - 这意味着容器需要以特权模式运行。

     

主机服务器还包含(并且这里是神奇的)ip路由表条目,它通过代理容器重新路由来自任何容器的所有流量,但是发往目的地为80的代理。

     

最后一点基本上意味着对于端口80流量,从容器到世界其他地方的路由通过代理容器 - 给它机会NAT和透明代理。

https://github.com/silarsis/docker-proxy