链接的docker容器内的端口无法被其他容器访问

链接的docker容器内的端口无法被其他容器访问

按照 Docker 关于链接容器的文档,我尝试创建两个容器:salt-master 和 salt-minion,salt-minion 链接到 salt-master。此外,我使用 Dockerfile EXPOSE 指令公开 salt master 上的端口。据我所知,我应该从 salt-minion 容器访问 salt-master 的公开端口。

我的 salt-master 的 Dockerfile 是:

FROM fedora
EXPOSE 4505 4506
ADD master /etc/salt/master
CMD /usr/bin/salt-master -l debug

我使用以下命令运行 salt-master 容器:

docker run -it --name salt-master myuser/fedora-salt-master /bin/bash

我使用以下命令运行 salt-minion 容器:

docker run -it --name salt-minion --link salt-master:salt-master  myuser/fedora-salt-minion /bin/bash

然后从 salt-minion 容器内部运行并得到:

telnet salt-master 4506
Trying 172.17.0.105...
telnet: connect to address 172.17.0.105: No route to host

如果我查看 salt-master 内部,端口似乎打开了。但是 salt-minion 无法访问它们。

如果我使用 tcpdump 查看,我会得到:

11:26:12.188884 IP 172.17.42.1 > 172.17.0.112: ICMP host 172.17.0.111
   unreachable - admin prohibited, length 68

在哪里:

172.17.0.111 是 salt-minion,这是我尝试端口的主机

172.17.0.112 是 salt-master,即公开端口的主机

172.17.42.1是docker0虚拟接口

有人有线索吗?

答案1

主机是 Fedora 22,似乎主机上的防火墙阻止了容器之间的通信。我运行了 Fedora 的防火墙,这让容器可以互相 ping 通,但无法访问它们的端口。我禁用了防火墙,只使用了 iptables,使用 iptables 后,容器甚至无法互相 ping 通。这是否是 Docker 添加规则或现有防火墙规则的错误,我还没有调查。但停止主机上的防火墙和 iptables 后,问题就解决了。

相关内容