2017-09-24 61 views
0

我是碼頭工的新手,我需要你們對集裝箱之間的溝通方面的幫助。兩個碼頭集裝箱之間的溝通

我有兩個容器 容器1:它是一個網站,並運行在80端口 集裝箱2:它是上述網站的網絡API和運行在8000端口

我安裝在我的樹莓派兩個容器。我RPI hostname是樹莓派 我創建了兩個集裝箱,--net =主機,以便在我的網站,我可以通過http://raspberrypi:8000/dosomething

打電話給我的網站,但RPI的主機名是可以改變的,我不能重新創建網站容器新的API URL(例如:http // new_host_name:8000/DoSomething的),所以我的問題是

有什麼辦法指定主機名到一個容器,這樣我可以在其他容器中使用它? 例如: 容器2使用「my_service」作爲它的主機名,所以在容器1中,我可以使用「http // my_service:8000/DoSomething的」。我的客戶可以更改他們的RPI的主機名,我不需要更新我的代碼。

感謝,並有愉快的一天。

+2

https://docs.docker.com/compose/ – jonrsharpe

回答

0

假設您運行以下命令第一容器:

docker run -d --name my_service web_api_image 

,所以你可以使用--link標誌運行第二:

docker run -d -P --name web --link my_service:my_service website_image 

那麼,網站的容器內,你可以參考到web api使用my_service主機名。

請注意: --linkdeprecated

你也可以使用docker-compose

version: "2" 
services: 
    web_api: 
    image: web_api_image 
    container_name: web_api 
    ports: 
     - "8000:8000" 
    expose: 
     - "8000" 
    website: 
    image: website_image 
    container_name: website 
    ports: 
     - "80:80" 
    links: 
     - "web_api:web_api" 

替換圖片名稱與docker-compose up

+0

感謝。但是當我使用--link時,它會顯示一條錯誤消息「docker:來自守護進程的錯誤響應:衝突選項:主機類型網絡不能與鏈接一起使用,這會導致未定義的行爲 」。也許,我使用--net = host。無論如何,在這種情況下,你能給我一個關於碼頭合成的例子嗎? – Doraemon

+0

不要使用'--net'標誌。確保你刪除了所有容器'docker ps -a'。如果你更喜歡碼頭作者,我編輯答案.. – ItayB

+0

@Doraemon是否有效?它的工作原理是 – ItayB

0

您可以使用docker-compose運行,因爲同樣的撰寫文件中的所有容器都處在同一網絡內的默認和可使用他們的服務名稱互相呼叫。

但是,如果你正在使用docker run您使用-h標誌可以指定主機名。例如:docker run -h test.example.com -it ubuntu /bin/bash

我建議你尋找到泊塢窗,撰寫的aliases。更進一步,您和您的客戶都可以使用env_file變量來指定變量的值。