为什么使用DOCKER_OPTS="--iptables=false";中断docker compose的DNS发现?

为什么使用DOCKER_OPTS="--iptables=false";中断docker compose的DNS发现?,docker,docker-compose,Docker,Docker Compose,当我将此行添加到我的/etc/default/docker时 DOCKER_OPTS="--iptables=false" 那么DNS就不再工作了。docker compose启动的一组容器不再能够找到彼此: version: '2' services: elasticsearch: image: elasticsearch:latest volumes: - ./esdata:/usr/share/elasticsearch/data

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

DOCKER_OPTS="--iptables=false"
那么DNS就不再工作了。docker compose启动的一组容器不再能够找到彼此:

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引擎重新启动)后,这一切正常

为什么会这样

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

谢谢

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

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

  • 您的
    iptables
    是否允许此特定连接?如果在守护进程启动时设置
    --iptables=false
    ,Docker将永远不会更改系统
    iptables
    规则。否则Docker服务器将向Docker筛选器链附加转发规则

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

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

    我认为你的整个案例的秘诀是:

  • DEFAULT\u FORWARD\u POLICY=“ACCEPT”
  • DOCKER\u OPTS=“--iptables=false”
  • 在iptables中配置NAT

  • 有关更多详细信息,请参见

    您是如何解决此问题的?