Docker Compose 忽略来自其他容器的 iptables 配置

Docker Compose ignores iptables configuration from other container

我在公司代理后面。为了在不设置 http_proxyhttps_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,希望这对其他人也有帮助。