2016-02-11 64 views
1

我使用泊塢版本1.9.1構建a34a1d5一個Ubuntu 14.04服務器主機上,我有4個容器:Redis的(基於Linux的高山3.2),MongoDB的(基於Linux的高山3.2 ),postgres(基於Ubuntu 14.04)以及運行連接到這些其他容器的應用程序(基於alpine linux 3.2)的應用程序。所有的db容器都在Dockerfile中公開它們相應的端口。泊塢窗容器無法連接到鏈接集裝箱服務

我做的數據庫容器的修改,所以他們的服務不綁定到本地主機的IP,但所有地址。這樣我就可以從應用程序容器連接到它們的全部。 爲了測試起見,我第一次運行數據庫容器中,然後該應用一個與像的命令以下:

docker run --rm --name app_container --link mongodb_container --link redis_container --link postgres_container -t localhost:5000/app_image 

我輸入應用容器的終端和我確認其/ etc/hosts文件包含其他容器的IP和名稱。然後我可以ping所有的db容器。但我無法連接到他們的任何數據庫容器的端口。

簡單:telnet mongodb_container 27017只是坐着永遠等待,如果我嘗試連接到其他分貝容器同樣的情況。如果我運行該應用程序,它也會抱怨它無法連接到指定的數據庫服務。

重要說明:我可以從主機telnet所有db容器的相應端口。

可能發生了什麼?

編輯:我會包括爲DB容器運行命令:

docker run --rm --name mongodb_container -t localhost:5000/mongodb_image 
docker run --rm --name redis_container -t localhost:5000/redis_image 
docker run --rm --name postgres_container -t localhost:5000/postgres_image 
+0

您可以包括所有這些其他容器中運行命令?你公開了正確的端口並使用'-p port:port'標誌嗎? –

+0

嘗試使用'nslookup mongodb_container'或'ping mongedb_container'來查看它是否解析IP。 '--link'參數應該在你的容器中的主機文件中寫入一個條目,使它們能夠解析。 只是爲了完整性......你可以運行在這樣的容器外殼: '泊塢窗EXEC - 它 /斌/ bash' –

+0

@ cricket_007,當然,我增加了運行命令和我,而我是測試,我停止了mongo容器,然後在其運行命令中添加了「-p 27017:27017」,但它仍然無法連接。在仔細檢查了Dockerfiles之後,我公開了正確的端口。 –

回答

1

好了,通過telnet這個問題似乎因爲以下兩個命令顯示出可能與高山的Linux Telnet客戶端我說,容器上的端口是開放的:

nmap -p27017 172.17.0.3 
nc -vz 172.17.0.3 27017 

正在主要集中在我發出telnet命令,我認爲這個問題是關係到被關閉的端口或東西;我忽略了應用程序中用來連接服務的配置文件(這是錯誤的文件名),我的錯誤。

現在一切工作正常。

相關問題