2017-08-17 47 views
0

我有一個CentOS服務器在同一個NIC上有兩個靜態IP地址(192.168.3.100和192.168.3.101),兩個容器在端口映射上運行,如下所示。容器使用相同的默認「橋樑」泊塢窗無法通過端口映射的IP地址到達另一個碼頭容器

192.168.3.100:80->80/tcp container1

192.168.3.101:80->80/tcp container2

的網絡從主機,我可以執行curl 192.168.3.100curl 192.168.3.101和工作正常。從主機/容器,我可以執行curl 172.17.0.2curl 172.17.0.3,並正常工作。我不能執行curl 192.168.3.100curl 192.168.3.101從這兩個容器。結束錯誤No route to host。我可以ping通它。

我在這裏錯過了什麼?我想盡量避免使用192碼頭網絡,因爲我不想用一臺機器捆綁地址空間。使用泊塢窗1.12.6

輸出iptables的拒絕規則iptables -S | grep -i reject

-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable 
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 

感謝您的輸入

+0

你可以從另一個執行'curl container1'嗎?假設這是容器名稱。在同一網絡內工作時,我傾向於使用容器/服務名稱 –

+0

是使用容器名稱本身工作,因爲它解析爲172個網絡IP地址。我希望它能夠使用端口映射的192個網絡IP地址,因爲我計劃將其分配給DNS名稱查找。 –

回答

0

如果你能夠ping並不能捲曲,你會得到no route to host那麼它主要是指你的數據包通過防火牆被拒絕。

使用sudo iptables -Ssudo iptables -L -n檢查iptables。如果你看到使用icmp規則的REJECT或REJECT比這個問題。

如果你不擔心iptables,可以清除它。停止碼頭服務並運行以下步驟

$ iptables -F 
$ iptables -X 
$ iptables -t nat -F 
$ iptables -t nat -X 
$ iptables -t mangle -F 
$ iptables -t mangle -X 

這將清除所有表格。然後啓動Docker服務並再次運行容器

+0

我將需要iptables規則,但我可以添加例外以允許數據包。您能否告訴我們是否要在FORWARD鏈中添加例外情況。我假設這種傳輸是從一個接口傳輸到另一個接口,這將成爲FORWARD鏈的一部分 –

+0

使用'iptables -S | grep -i拒絕「,並將它們添加到您的問題 –

+0

你是對的,雖然它是阻止它的iptables。 '11:37:43.448812 IP(tos 0xc0,ttl 64,id 9868,offset 0,flags [none],proto ICMP(1),length 88)' '192.168.3.101> 172.17.0.3:ICMP host 192.168.3.101無法訪問 - 管理員禁止,長度爲68' –