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

fom*_*mil 14 proxy docker

我在Debian Jessie上运行docker,这是一个公司代理的背后.为了能够下载docker图像,我需要将以下内容添加到我的/etc/defaults/docker

http_proxy="http://localhost:3128/"
Run Code Online (Sandbox Code Playgroud)

我可以确认这是有效的.

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

export http_proxy=http://localhost:3128/
export https_proxy=https://localhost:3128/
export ftp_proxy=${http_proxy}
Run Code Online (Sandbox Code Playgroud)

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

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

(免责声明:我在https://superuser.com/posts/890196上问了这个问题,但docker问题的主页目前有点含糊不清).

lak*_*tak 7

请参阅代理所有容器:

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

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

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

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