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

时间:2018-07-23 18:45:50

标签: docker docker-compose iptables

我在公司代理后面。为了在不设置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,然后在ubuntu容器内执行curl google.com)来使用它,一切都很好。

但是如果我将这些容器与docker-compose一起使用,则第二个容器无法访问互联网/不使用代理服务器。

这是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撰写有什么不同吗?是否需要一些特殊属性? Nclarier / redsocks图像使用iptables路由流量,我高度怀疑这是断点。

1 个答案:

答案 0 :(得分:0)

问题本身与docker-compose无关,它只是浮​​出水面。

docker-compose为它旋转的容器创建自己的桥接网络,即使您未指定它也是如此。

nclarier/redsocks映像创建iptable规则以通过其代理路由流量,它通过指定接口-docker0(恰好是网桥网络)来实现此目的。

如果不指定接口,则一切都很好。来自每个可以访问Internet的网络的所有流量都通过redsocks代理进行路由。

我为图片创建了PR,希望对其他人也有所帮助。