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

fom*_*mil 21 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 http_proxy=...等来传递这些东西,但这很笨重。我希望它适用于系统上的所有用户,而不必使用别名。

lak*_*tak 5

看到这个答案

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

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

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

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