探索Docker 17.06。Docker容器無法ping通外部世界 - iptables
我已經在Centos 7上安裝了Docker並創建了一個容器。用默認網橋啓動容器。我可以ping通兩個主機適配器,但不是外部世界,例如www.google.com
所有建議基於老版本的Docker和它的iptables設置。
我想了解如何ping到外部世界,請問需要什麼?
TIA!
探索Docker 17.06。Docker容器無法ping通外部世界 - iptables
我已經在Centos 7上安裝了Docker並創建了一個容器。用默認網橋啓動容器。我可以ping通兩個主機適配器,但不是外部世界,例如www.google.com
所有建議基於老版本的Docker和它的iptables設置。
我想了解如何ping到外部世界,請問需要什麼?
TIA!
請確認您現有的iptables:
iptables --list
應該表現出你的源和目標細節的iptables的名單。
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
如果是隨時隨地的源和目標應該ping通外IP地址。(默認情況下它隨時隨地)
如果不使用此命令來設置你的iptable(泊塢窗-USER)
iptables -I DOCKER-USER -i eth0 -s 0.0.0.0/0 -j ACCEPT
希望這會有所幫助!
一個好主意是使用,從容器中時:
docker run -p <host_port>:<docker_port>
這將確保您的橋接網絡將在一個端口上同時碼頭工人和主機綁定,然後你可以從訪問外部世界的容器。
如果你不想使用-p,你可以檢查你的iptables,容器和S.O並放在這裏嗎?
參考:
https://docs.docker.com/v1.11/engine/reference/commandline/run/
感謝您的指點。我使用-p選項啓動容器,將主機端口8443重定向到容器端口443以進行https流量。自從您提到v1.1的文檔以來,最新的docker 17.06已經發生了很大的變化。 – user1945022
如果你能ping通www.google.com的主機可以嘗試以下步驟: 主機上運行:
sudo ip addr show docker0
你會得到輸出其中包括:
inet 172.17.2.1/16 scope global docker0
docker主機在docker0網絡接口上具有IP地址172.17.2.1。
然後啓動容器:
docker run --rm -it ubuntu:trusty bash
和運行
ip addr show eth0
輸出將包括:
inet 172.17.1.29/16 scope global eth0
您的容器的IP地址爲172.17.1.29。現在看一下路由表: 運行:
route
輸出將包括:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 172.17.2.1 0.0.0.0 UG 0 0 0 eth0
這意味着泊塢窗主機172.17.2.1的IP地址設置爲默認路由是從訪問你的容器。
現在到您的主機IP試試平:
[email protected]:/# ping 172.17.2.1
PING 172.17.2.1 (172.17.2.1) 56(84) bytes of data.
64 bytes from 172.17.2.1: icmp_seq=1 ttl=64 time=0.071 ms
64 bytes from 172.17.2.1: icmp_seq=2 ttl=64 time=0.211 ms
64 bytes from 172.17.2.1: icmp_seq=3 ttl=64 time=0.166 ms
如果這部作品最有可能你就可以ping通www.google.com
希望這將有助於!
非常感謝! – user1945022
感謝您的迅速回復!我會在24小時內測試並嘗試(遠離設置atm)。但是從記憶來看,所有的都是'任何'。 – user1945022
這裏的iptables --list https://pastebin.com/KfUUCyu2 – user1945022
你是從容器內還是從主機ping外部IP? IP表格看起來很適合你。你可以嘗試運行iptables -nvL並檢查是否有任何限制。服務器託管在哪裏? AWS?谷歌? Azure的? –