Docker

如何執行同一網路上的另一台主機可訪問的多個 docker 容器

  • May 22, 2018

我有一台安裝了 docker 的 Windows 10 機器。主機連接到專用 LAN 192.168.0.0/24。我的容器應用程序公開了一個 UDP 和一個 TCP 埠。我想執行容器的多個實例,並讓同一網路上的其他(非 docker)機器都可以訪問它們。我必須能夠使用定義的埠號,而不是隨機生成的埠號。我怎樣才能做到這一點?

由於沒有人回應,我現在已經自己弄清楚了,我會回答我自己的問題。當然,可能還有其他方法可以給這隻貓剝皮……

創建 VLAN

抄自https://docs.docker.com/machine/drivers/hyper-v/

  • 從開始菜單中,打開 Windows 10 Hyper-V 管理器
  • 在右側點擊虛擬交換機管理器
  • 創建一個新的外部網路
  • 給它一個簡潔的名字
  • 從下拉列表中選擇您的網路設備(該設備必須具有活動連接!)
  • 重啟!

創建節點/機器

這些容器將在主機上具有 1:1 的埠映射,因此我們將為我們希望執行的每個容器創建一台機器。

  • 創建一個瘦 VM(現在只做一個,並根據需要對每個容器重複這些指令):docker-machine create --driver hyperv --hyperv-virtual-switch "concise_name" My_Node_1
  • 啟動具有管理員權限的 Powershell
  • 將 shell docker 命令的上下文切換到新機器: docker-machine env My_Node_1
  • 將輸出的最後一行(不帶 #)複製並粘貼到 shell 並執行它。它將是這樣的:& "C:\Program Files\Docker Toolbox\docker-machine.exe" env My_Node_1 | Invoke-Expression 從現在開始,所有docker命令都將在機器上執行My_Node_1

建構並執行

  • cd 到包含 Dockerfile 的目錄
  • 建構鏡像,例如docker build . -t image_name
  • 現在執行一個容器(每台機器只執行一次)--net=host,例如docker run -i -t -P -d --net=host --rm image_name

沖洗並從“創建節點/機器”重複所需數量的容器

引用自:https://serverfault.com/questions/913049