为什么使用DOCKER_OPTS =“ - iptables = false”会破坏docker-compose的DNS发现?

时间:2016-07-26 14:01:13

标签: docker docker-compose

当我将此行添加到我的/ etc / default / docker

DOCKER_OPTS="--iptables=false"

然后DNS不再有效。由docker启动的一组容器不再能够找到彼此:

version: '2'
services:
    elasticsearch:
       image: elasticsearch:latest
       volumes:
          - ./esdata:/usr/share/elasticsearch/data
    kibana:
       image: kibana:latest
       environment:
          - ELASTICSEARCH_URL=http://elasticsearch:9200

设置iptables = false时,上述操作停止。 kibana容器无法“找到”elasticsearch容器。但是当删除(并重新启动docker引擎)时,这样可以正常工作。

为什么会这样?

(更重要的是,为什么iptables = false不是使用ufw时的默认设置?)

感谢

1 个答案:

答案 0 :(得分:13)

来自https://docs.docker.com/v1.5/articles/networking/#between-containers

  

容器是否能与世界对话取决于两个因素。

     
      
  1. 主机是否愿意转发IP数据包?这由ip_forward系统参数控制。如果此参数为1,则数据包只能在容器之间传递。通常,您只需将Docker服务器保留为其默认设置--ip-forward=true,并且当服务器启动时,Docker将为您设置ip_forward为1。

  2.   
  3. 您的iptables是否允许此特定连接?如果在守护程序启动时设置iptables,Docker将永远不会对系统--iptables=false规则进行更改。否则,Docker服务器会将转发规则附加到DOCKER过滤器链。

  4.         

    Docker不会从DOCKER过滤器链中删除或修改任何预先存在的规则。这允许用户预先创建进一步限制对容器的访问所需的任何规则。

来自https://docs.docker.com/engine/installation/linux/ubuntulinux/#enable-ufw-forwarding

  

如果在运行Docker的同一主机上使用UFW(简单防火墙),则需要进行其他配置。 Docker使用网桥来管理容器网络。默认情况下,UFW会丢弃所有转发流量。因此,要在启用UFW时运行Docker,您必须适当地设置UFW的转发策略。

我认为您案件的整个配方将是:

  1. DEFAULT_FORWARD_POLICY="ACCEPT"
  2. DOCKER_OPTS="--iptables=false"
  3. 在iptables中配置NAT
  4. 有关详细信息,请参阅Running Docker behind the ufw firewall