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


18

我在Debian Jessie上的公司代理后面运行docker。为了能够下载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=...etc 传递这些东西,但这很笨拙。我希望它对系统上的所有用户有效,而不必使用别名。

Answers:


5

看到这样的答案

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

主机服务器还包含(这就是魔术)ip路由表条目,这些条目通过代理容器重新路由来自除目的地为端口80的代理之外的任何容器的所有流量。

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

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


这不适用于“ https”。
ceving
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.