我在一台机器上运行了多个docker容器,希望为每一个容器的流量指定一个代理服务器; 不仅仅是http等等流量,而是所有流量,同时还要排除局域网流量;
解决方法:
-
为需要走代理的容器分配一个专属的 Docker Bridge 网络(例如固定子网 172.28.0.0/16)。
-
在宿主机上运行一个透明代理客户端,监听本地重定向端口(例如 127.0.0.1:7892),或者局域网架设专门的代理服务或者网关
-
使用宿主机的 iptables 规则,将所有来自该子网、目标为外部公网的 TCP 流量 REDIRECT 到代理服务器
这样的好处有很多:
- 不需要容器做任何更改
- 可以为不同的容器指定不同的代理
- HOST的流量不受任何影响