Docker
如何執行同一網路上的另一台主機可訪問的多個 docker 容器
我有一台安裝了 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
沖洗並從“創建節點/機器”重複所需數量的容器