Linux

其他容器無法訪問連結的 docker 容器內的埠

  • August 7, 2015

按照 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 虛擬介面

有人有線索嗎?

主機是fedora 22,主機上的防火牆似乎阻止容器相互訪問。我執行了 Fedora 的 firewalld,它讓容器相互 ping 通,但不能到達它們的埠。我禁用了 firewalld,只使用了 iptables,而使用 iptables 的容器甚至無法相互 ping 通。如果這是Docker添加規則或現有防火牆規則的問題,我還沒有調查。但是在主機上同時停止 firewalld 和 iptables 使它工作。

引用自:https://serverfault.com/questions/710837