我真的不明白這裏發生了什麼。我只是單純的想一個公佈的端口從一個碼頭工人,容器內進行的HTTP請求,另一個搬運工容器,通過主機,使用主機的公網IP。爲什麼我不能通過主機捲起另一個碼頭集裝箱
這是我的設置。我有我的開發機器。我有一個有兩個容器的碼頭主機。 CONT_A和監聽端口上發佈的網絡服務3000
DEV-MACHINE
HOST (Public IP = 111.222.333.444)
CONT_A (Publish 3000)
CONT_B
在我的開發機(一個完全不同的機器)
我可以捲曲沒有任何問題
curl http://111.222.333.444:3000 --> OK
當我SSH進入主機
我可以當我執行內部CONT_B
不可能的,只是超時沒有任何problesm
curl http://111.222.333.444:3000 --> OK
捲曲。萍雖然好...
docker exec -it CONT_B bash
$ curl http://111.222.333.444:3000 --> TIMEOUT
$ ping 111.222.333.444 --> OK
爲什麼?
的Ubuntu 16.04,多克爾1.12.3(默認網絡設置)
我想這可能是因爲碼頭工人如何處理網絡使用iptables的路橋網絡。我將不得不查看它,但我猜你所提供的IP地址可能是從主機看到的IP地址,而不是在碼頭網絡內分配的「內部IP」。 ping可能解決的原因是因爲它解析爲docker主機(而不是容器)。但是,實現這一目的的docker方式是不將端口發佈到容器A中,而是使覆蓋網絡https://docs.docker.com/engine/userguide/networking/。 –
@RikNauta我使用的IP地址是**公共主機ip **。當然這應該總是正確解決,除非它與內部碼頭網絡有某些衝突。這是一個'104 ....'ip地址。 – pqvst
這應該工作。有一個用戶級代理進程docker運行以監聽主機並將tcp連接轉發到容器中。在Docker 1.11中有相同的工作嗎? docker守護進程中是否將'userland-proxy'設置爲false? – Matt