2017-08-04 89 views
2

我正在編寫兩個容器,其中一個使用Web服務,另一個使用數據庫。
這裏是我撰寫的文件:無法與羣集內的Docker容器和主機連接

version: '3.3' 
services: 
    web: 
    image: microsoft/aspnetcore:1.1 
    container_name: web 
    ports: 
    - 5555:80 
    links: 
    - db 
    db: 
    image: microsoft/mssql-server-linux:rc1 
    container_name: db 
    ports: 
    - 1533:1433 
    environment: 
    - "ACCEPT_EULA=Y" 
    - "MSSQL_SA_PASSWORD=MyAdminPwd2017" 
    - "MSSQL_PID=Developer" 

所以,從我的asp.net應用程序的核心在web服務運行,我可以在db只是用db作爲主機訪問數據庫。但db是不可見的從主機(我有一個默認橋網絡)。如果我檢查運行的db容器並找到它的ip地址,我可以從主機訪問我的數據庫,然後我可以連接到<ip>,1533

問題是,web容器和主機都使用存儲訪問數據庫憑據的文件。所以我需要一種方法來命名db,所以我可以從兩個世界訪問(在羣體內外,從我的主機)

有沒有辦法實現這一點?我嘗試在我的docker-compose文件中定義一個主機網絡,並使兩個服務都使用該網絡,但我收到一條消息,說只有一個主機網絡可以定義。

編輯:試圖改善問題的標題,但我還是不相信,改進歡迎

+0

從您的主機,您可以使用Access數據庫「本地主機:<暴露端口>」。您可以在主機中創建一個別名,從「localhost:」到「db」。這會幫助你嗎?通過建立主機網絡,您不會受益於容器網絡隔離。 – Sreeni

+0

謝謝,通過在我的主機(Windows)中創建別名,您的意思是在'C:\ Windows \ System32 \ drivers \ etc \ hosts'中創建一個條目,對吧?我真的不喜歡這樣做。如果我不關心容器網絡隔離並且希望容器和主機位於同一網絡中,該怎麼辦?我可以做到嗎? – sebagomez

+0

在Docker內部,dns解析發生在Docker引擎的容器中,併爲未解析的名稱使用外部dns服務器。主機不知道Docker引擎的DNS數據庫。在你的情況下,你希望容器和主機具有相同的數據庫的DNS數據庫。最簡單的方法是主機別名,這似乎不適合你。我能想到的一種方式是使用外部DNS服務器(如consul)並將容器中的服務發佈到外部服務器,並使容器和主機都使用該DNS服務器。 – Sreeni

回答

0

好了,所以,要回答我的問題,我想是不是更多鈔票,至少到今天爲止。

有人寫了一篇很好的文章,說明爲什麼我不能達到我想要的。話雖如此,它在Windows Containers中是可行的,但它可能是一個暫時的「限制」。

鏈接的帖子:https://derickbailey.com/2016/08/29/so-youre-saying-docker-isnt-a-virtual-machine/ 並鏈接到泊塢窗論壇:https://forums.docker.com/t/access-dockerized-services-via-the-containers-ip-address/21151

相關問題