2016-03-21 103 views
8

我正在嘗試爲我的項目設置開發環境。在Docker中使用主機網絡和其他網絡撰寫

我有一個容器應該放在他自己的網絡(「服務」在我的情況),和一個容器(apigateway)應該訪問該網絡,同時暴露一個HTTP端口到主機的網絡。

理想的情況下我的搬運工撰寫的文件應該是這樣的:

version: '2' 
services: 
    ms1: 
     expose: 
      - "13010" 
     networks: 
      services: 
       aliases: 
        - ms1 
    apigateway: 
     networks: 
      services: 
       aliases: 
        - api 
     network_mode: "host" 
networks: 
    services: 

泊塢窗,撰寫不允許在同一時間使用network_mode和網絡。

我還有其他的選擇嗎?

目前我使用的是這樣的:

apigateway: 
     networks: 
      services: 
       aliases: 
        - api 
     ports: 
      - "127.0.0.1:10000:13010" 

然後apigateway容器上0.0.0.0:13010監聽。它可以工作,但速度很慢,如果主機的互聯網連接斷開,它會凍結。

另外,我正計劃在碼頭工人未來使用流浪者,它是否允許以一種乾淨的方式解決?

+0

你能直接使用一個IP地址ms1嗎?請參閱https:// stackoverflow。com/questions/27937185/assign-static-ip-to-docker-container如何用docker做到這一點1.10.1 –

+0

我試圖做同樣的事情,但要解決一個不同的問題(也許)。在我的情況下,我創建了兩個服務之間共享的網絡,但由於某種原因,其中一個服務未連接到互聯網(我認爲原因不是主機網絡的一部分)。但是,問題在於它無法解析URL,因爲無法訪問DNS。我做了一個使用IP地址的quickfix,但會徹底查看它以將請求轉發給正確的DNS。 – omrsin

回答

0

我想試試這個:

1 /查找主機網絡 docker network ls

2 /使用此dockercompose文件

 services: 
      ms1: 
       ports: 
        - "13010" 
       networks: 
        - service 
      apigateway: 
       networks: 
        - front 
        - service 

     networks: 
      front: 
      service: 
       external: 
        name: "<ID of the network>" 
+0

當我嘗試使用上述命令創建主機網絡時,出現此錯誤:來自守護進程的錯誤響應:只允許「主機」網絡的一個實例「 – disrvptor

+0

因此,您可以使用已存在的一個實例。我更新了答案,但我沒有能力對其進行測試。 – Plup

0

在搬運工1.13,你應該能夠創建一個服務兩個網絡之間的橋樑。我使用類似的東西來解決another problem,我想這也可能有助於在這裏:​​

docker service create \ 
--name proxy \ 
--network proxy \ 
--publish mode=host,target=80,published=80 \ 
--publish mode=host,target=443,published=443 \ 
--constraint 'node.hostname == myproxynode' \ 
--replicas 1 \ 
letsnginx 
0

expose在泊塢窗,撰寫does not publish the port on the host。由於您可能不再需要服務鏈接(相反,您應該依賴Docker網絡,因爲您已經這樣做),但該選項的總體價值有限,似乎在您的方案中對您沒有任何價值。

嫌疑你來使用它的錯誤,並意識到它似乎沒有任何效果本身後,偶然發現了一個事實,即使用主機的網絡驅動器將「使工作」。這與expose財產無關,請介意你。只是主機網絡驅動程序允許包含的進程直接綁定到主機網絡接口。得益於此,您可以從外部訪問API網關進程。你可以刪除expose屬性,它仍然可以工作。

如果這就是爲什麼你選擇了主機網絡驅動程序的唯一原因,那麼你已經愛上受害者X-Y problem

(TL; DR) 你不應該需要使用主機的網絡驅動程序在正常情況下,默認橋接網絡驅動程序工作得很好。你要找的是ports屬性,而不是expose。這在後臺設置了適當的端口轉發。

相關問題