2016-06-12 85 views
1

我正在努力執行一個可悲的測試,其中涉及到sandbox01網絡中的服務器與在我的「Docker Host」服務器中運行的Docker容器之間的通信(該計算機與sandbox01中的其他節點位於同一子網中網絡,即在10 *地址/範圍內有一個名爲ens34的接口,它在9 *網絡上有一個eth0接口,允許它訪問外部世界:下載軟件包,碼頭圖像等等等)。如何讓我的Docker容器通過第二個界面與另一個節點通信?

總之,這裏是一個小圖來說明我有: Diagram illustrating communication between networks and the Docker container

問題: 不能在sandbox01子網中的節點之間的通信(10 *網絡)和容器。 例如,someserver.sandbox01→mydocker2:ens34 :: docker0 :: vethXXX→容器 該通信僅在我停止iptables時起作用,這使得事情真的很神祕!只是想知道如果你面臨任何類似的問題..任何想法將不勝感激。

神祕: 經過多次測試後,確認容器無法與10. *網絡中的任何其他節點進行通信 - 它的行爲並不如預期:它應該通過其產生響應網關,docker0(172.17.0.1),並通過docker主機中的路由表找到與「someserver.sandbox01」(10.1.21.59)進行通信的路徑。 它只有當我們讓它在iptables中處理MASQUARADE時纔有效。但是,Docker會自動添加這條規則:-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -c 0 0 -j MASQUERADE

**請注意「!-o docker0」,因此Docker不希望我們屏蔽發送請求的IP地址?這是搞亂溝通莫名其妙...

容器響應任何通信通過IP 9. *(eth0) - 即,我可以發送請求從我的筆記本電腦 - 但從來沒有通過10。 *(ens34)。如果我在容器中運行一個終端,容器可以利用所有映射的路由ping所有IP地址,除了! 10 *範圍內的IP地址。爲什麼??????

[[email protected] my-nc-server]# docker run -it -p 8080:8080 --name nc-server nc-server /bin/sh 
sh-4.2# ping 9.83.90.55 
PING 9.83.92.20 (9.83.90.55) 56(84) bytes of data. 
64 bytes from 9.83.90.55: icmp_seq=1 ttl=117 time=124 ms 
64 bytes from 9.83.90.55: icmp_seq=2 ttl=117 time=170 ms 
^C 
--- 9.83.90.55 ping statistics --- 
2 packets transmitted, 2 received, 0% packet loss, time 1000ms 
rtt min/avg/max/mdev = 124.422/147.465/170.509/23.046 ms 
sh-4.2# ping 9.32.145.98 
PING 9.32.148.67 (9.32.145.98) 56(84) bytes of data. 
64 bytes from 9.32.145.98: icmp_seq=1 ttl=63 time=1.37 ms 
64 bytes from 9.32.145.98: icmp_seq=2 ttl=63 time=0.837 ms 
^C 
--- 9.32.145.98 ping statistics --- 
2 packets transmitted, 2 received, 0% packet loss, time 1001ms 
rtt min/avg/max/mdev = 0.837/1.104/1.372/0.269 ms 
sh-4.2# ping 10.1.21.5 
PING 10.1.21.5 (10.1.21.5) 56(84) bytes of data. 
^C 
--- 10.1.21.5 ping statistics --- 
4 packets transmitted, 0 received, 100% packet loss, time 2999ms 
sh-4.2# ping 10.1.21.60 
PING 10.1.21.60 (10.1.21.60) 56(84) bytes of data. 
^C 
--- 10.1.21.60 ping statistics --- 
4 packets transmitted, 0 received, 100% packet loss, time 2999ms 

出於某種原因,在這裏此接口不與碼頭工人發揮好:

ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 
     inet 10.1.21.18 netmask 255.255.255.0 broadcast 10.1.21.255 

難道這是關係到一個事實,即eth0的是此泊塢窗主機主網卡?

解決方法: 在mydocker2我們需要停止iptables和下ens34→

service iptables stop 
ifconfig ens34:0 10.171.171.171 netmask 255.255.255.0 

而且在someserver.sandbox01添加一個新的子接口,我們需要添加一個新的路由→

route add -net 10.171.171.0 netmask 255.255.255.0 gw 10.1.21.18 

然後之間的溝通工作。我知道..奇怪,對吧?

如果您有任何想問的問題,不,我不想使用「--net=host」選項將接口從碼頭主機複製到我的容器。

那麼,想法?建議?想法?

回答

0

已解決!!!

裏面的/ etc/sysconfig/network中的腳本,有2個文件: 路由ens34和規則ens34-

,如果你刪除這些,並重新啓動網絡,它應該開始工作。

乾杯!

相關問題