当我将此行添加到我的/ 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时的默认设置?)
感谢
答案 0 :(得分:13)
来自https://docs.docker.com/v1.5/articles/networking/#between-containers
容器是否能与世界对话取决于两个因素。
主机是否愿意转发IP数据包?这由
ip_forward
系统参数控制。如果此参数为1
,则数据包只能在容器之间传递。通常,您只需将Docker服务器保留为其默认设置--ip-forward=true
,并且当服务器启动时,Docker将为您设置ip_forward为1。- 醇>
您的
iptables
是否允许此特定连接?如果在守护程序启动时设置iptables
,Docker将永远不会对系统--iptables=false
规则进行更改。否则,Docker服务器会将转发规则附加到DOCKER过滤器链。Docker不会从DOCKER过滤器链中删除或修改任何预先存在的规则。这允许用户预先创建进一步限制对容器的访问所需的任何规则。
来自https://docs.docker.com/engine/installation/linux/ubuntulinux/#enable-ufw-forwarding
如果在运行Docker的同一主机上使用UFW(简单防火墙),则需要进行其他配置。 Docker使用网桥来管理容器网络。默认情况下,UFW会丢弃所有转发流量。因此,要在启用UFW时运行Docker,您必须适当地设置UFW的转发策略。
我认为您案件的整个配方将是:
DEFAULT_FORWARD_POLICY="ACCEPT"
DOCKER_OPTS="--iptables=false"
有关详细信息,请参阅Running Docker behind the ufw firewall