2015-02-17 160 views
0

我想將一些現有的服務器放置在碼頭集裝箱內。我有兩個:一個應用服務器和一個api服務器,但用node.js開發。我有他們都在一個Ubuntu的虛擬機內工作,並可以從外面的兩個應用程序,這是偉大的。發送請求從一個碼頭集裝箱到另一個

每臺服務器都有自己的域。該應用服務器使用域名app和api服務器使用域名,我知道聰明的域名api。本地我將兩個域添加到我的主機文件中,以指向分配給ubuntu vm的ip。

我遇到的唯一問題是從應用服務器發送的請求需要路由到api服務器。嘗試編輯應用程序服務器容器(通過Dockerfile)和ubuntu vm的hosts文件,但請求失敗。

有沒有簡單的方法來獲取該請求不出去,並試圖解決API域,但讓它指向的API容器?

回答

3

這種典型的解決方案是使用多克的--link選項容器聯繫起來。也就是說,如果你這樣做:

docker run -d --name api myapi 
docker run -d --name app --link api:api myapp 

然後app容器中,主機名api將映射到api容器。您還將有一組可用的環境變量來描述鏈接容器上的暴露端口。例如,如果你的「API」容器暴露的端口80,變量將是這樣的:

API_PORT_80_TCP=tcp://172.17.0.10:80 
API_PORT_80_TCP_PORT=80 
API_PORT_80_TCP_PROTO=tcp 
API_PORT=tcp://172.17.0.10:80 
API_NAME=/app/api 
API_PORT_80_TCP_ADDR=172.17.0.10 

有一些缺點的鏈接選項:

  • 這隻適用於託管在同一個物理容器主機
  • 如果重新啓動「api」容器,則還必須重新啓動「應用」容器。

如果您在多主機環境中運行,這兩種特定問題都可能由您選擇的編排工具解決。

+0

**環境變量不再用於連接到鏈接服務的推薦方法。** – 2017-05-22 11:39:54

+0

*(只有在使用舊版本1撰寫文件格式時纔會填寫環境變量)* 而是使用鏈接名稱(默認情況下爲鏈接服務的名稱)作爲要連接的主機名稱。 https://docs.docker.com/compose/link-env-deprecated/ – 2017-05-22 11:58:52

+0

** - 鏈接是遺留功能。** 您應該總是更喜歡使用Docker網絡驅動程序進行鏈接。 – 2017-05-22 12:06:32

0

鏈接功能( - 鏈接)是一項遺留功能。

你應該總是喜歡使用在連接泊塢網絡驅動程序。

:運行與Redis的結合到本地主機然後運行redis的-CLI命令並連接到Redis的服務器通過本地主機接口Redis的容器。

$ docker run -d --name redis example/redis --bind 127.0.0.1 
$ # use the redis container's network stack to access localhost 
$ docker run --rm -it --network container:redis example/redis-cli -h 127.0.0.1 

有關詳細信息,請參閱文檔。

https://docs.docker.com/compose/link-env-deprecated/

https://docs.docker.com/engine/reference/run/#network-settings

相關問題