为什么使用DOCKER_OPTS =“ – iptables = false”中断docker-compose的DNS发现?

当我把这一行添加到我的/ etc / default / docker

DOCKER_OPTS="--iptables=false" 

那么DNS不再起作用。 由docker工人创build的一组容器不再能够find对方:

 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容器不能'find'elasticsearch容器。 但是,当删除(和docker引擎重新启动),那么这工作正常。

为什么是这样?

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

谢谢

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

一个集装箱是否可以与世界交stream受两个因素的制约。

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

  2. 你的iptables允许这个特定的连接? 如果您在守护进程启动时设置了--iptables=false ,Docker将永远不会更改您的系统iptables规则。 否则,Docker服务器会将转发规则附加到DOCKERfilter链。

Docker不会删除或修改DOCKERfilter链中的任何预先存在的规则。 这允许用户预先创build任何需要进一步限制访问容器的规则。

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

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

我认为你的情况的整个配方是:

  1. DEFAULT_FORWARD_POLICY="ACCEPT"
  2. DOCKER_OPTS="--iptables=false"
  3. 在iptables中configurationNAT

有关更多详细信息,您可以在ufw防火墙后面看到Running Docker