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

Proxy 如何使所有docker容器使用我的代理?,proxy,docker,Proxy,Docker,我在Debian Jessie上运行docker,Debian Jessie在公司代理的后面。为了能够下载docker图像,我需要将以下内容添加到我的/etc/defaults/docker http_proxy="http://localhost:3128/" 我可以证实这是有效的 但是,为了能够从容器中访问interwebz,我需要使用--net host启动所有会话,然后设置这些环境变量: export http_proxy=http://localhost:3128/ export h

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

http_proxy="http://localhost:3128/"
我可以证实这是有效的

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

export http_proxy=http://localhost:3128/
export https_proxy=https://localhost:3128/
export ftp_proxy=${http_proxy}
理想情况下,我希望容器不需要主机网络,也不知道代理(即,容器中对端口20、80、443的所有出站调用都通过主机的代理端口进行)。可能吗

如果做不到这一点,是否可以进行站点设置,以确保这些环境变量在本地设置,但永远不会作为映像的一部分导出?我知道我可以通过
--env http_proxy=…
等来传递这些东西,但这太麻烦了。我希望它能为系统上的所有用户工作,而不必使用别名

(免责声明:我是在上问这个问题的,但docker问题的主页目前有点模棱两可)。

请参见:

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

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

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


您是否尝试在docker容器中正确设置环境变量?localhost不是没有--net的docker容器中的localhost。应该是:http://[ip地址或主机名:3128/@user2105103我想你不明白我在问什么。代理可以工作,我希望它可以工作,而不必经历这些麻烦。没错。你是否尝试过正常的网络并正确指定代理?你知道docker默认创建一个完整的独立子网/网桥?你需要的http_代理设置上面描述的只会影响docker守护进程。不确定如何将其传播到正在运行的容器中。在IMO中并不真正属于容器定义的“内部”。传播到容器正是我所要求的,或者至少是为整个主机编写
--env
设置脚本的一种方法。