Linux
其他容器無法訪問連結的 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 虛擬介面
有人有線索嗎?
主機是fedora 22,主機上的防火牆似乎阻止容器相互訪問。我執行了 Fedora 的 firewalld,它讓容器相互 ping 通,但不能到達它們的埠。我禁用了 firewalld,只使用了 iptables,而使用 iptables 的容器甚至無法相互 ping 通。如果這是Docker添加規則或現有防火牆規則的問題,我還沒有調查。但是在主機上同時停止 firewalld 和 iptables 使它工作。