Docker Compose 忽略来自其他容器的 iptables 配置
Docker Compose ignores iptables configuration from other container
我在公司代理后面。为了在不设置 http_proxy
或 https_proxy
的情况下使用来自整个互联网的 Docker 容器,我正在使用 nclarier/redsocks docker 容器。
如果我通过 运行 docker run --privileged=true --net=host -d ncarlier/redsocks proxy.domain.com 8080
使用它,然后 运行 另一个容器,例如 docker run -it ubuntu bash
然后在 [=34] 中执行 curl google.com
=] 容器一切都很好。
但是如果我使用带有 docker-compose 的容器,第二个容器没有互联网 access/does 不使用代理服务器。
这是 yaml:
version: '3'
services:
proxy:
image: ncarlier/redsocks
command: proxy.domain.com 8080
privileged: true
network_mode: "host"
othercontainer:
image: ubuntu
depends_on:
- "proxy"
network_mode: "host"
stdin_open: true
tty: true
Docker compose 有什么不同吗?它需要一些特殊属性吗?
Nclarier/redsocks 图片使用 iptables 路由流量我高度怀疑它是断点。
好吧,问题本身与 docker-compose
无关,它只是浮出水面。
docker-compose
为它启动的容器创建自己的桥接网络,即使你没有指定它。
nclarier/redsocks 映像创建 iptable 规则以通过其代理路由流量,它通过指定接口 - docker0
恰好是桥接网络来实现。
如果您不指定接口,一切都很好。来自每个可以访问互联网的网络的所有流量都通过 redsocks 代理进行路由。
我已经为图像创建了 PR,希望这对其他人也有帮助。
我在公司代理后面。为了在不设置 http_proxy
或 https_proxy
的情况下使用来自整个互联网的 Docker 容器,我正在使用 nclarier/redsocks docker 容器。
如果我通过 运行 docker run --privileged=true --net=host -d ncarlier/redsocks proxy.domain.com 8080
使用它,然后 运行 另一个容器,例如 docker run -it ubuntu bash
然后在 [=34] 中执行 curl google.com
=] 容器一切都很好。
但是如果我使用带有 docker-compose 的容器,第二个容器没有互联网 access/does 不使用代理服务器。
这是 yaml:
version: '3'
services:
proxy:
image: ncarlier/redsocks
command: proxy.domain.com 8080
privileged: true
network_mode: "host"
othercontainer:
image: ubuntu
depends_on:
- "proxy"
network_mode: "host"
stdin_open: true
tty: true
Docker compose 有什么不同吗?它需要一些特殊属性吗? Nclarier/redsocks 图片使用 iptables 路由流量我高度怀疑它是断点。
好吧,问题本身与 docker-compose
无关,它只是浮出水面。
docker-compose
为它启动的容器创建自己的桥接网络,即使你没有指定它。
nclarier/redsocks 映像创建 iptable 规则以通过其代理路由流量,它通过指定接口 - docker0
恰好是桥接网络来实现。
如果您不指定接口,一切都很好。来自每个可以访问互联网的网络的所有流量都通过 redsocks 代理进行路由。
我已经为图像创建了 PR,希望这对其他人也有帮助。