我有一台安装了 docker 的 Windows 10 机器。主机连接到私有 LAN 192.168.0.0/24。我的容器应用程序公开一个 UDP 和一个 TCP 端口。我想运行容器的多个实例,并让它们都可以被同一网络上的其他(非 docker)机器访问。我必须能够使用定义的端口号,而不是随机生成的端口号。我该怎么做?
答案1
既然没人回复,而且我自己也搞清楚了,我就自己回答这个问题吧。当然,可能还有其他方法可以解决这个问题……
创建 VLAN
抄袭自https://docs.docker.com/machine/drivers/hyper-v/
- 从“开始”菜单中,打开 Windows 10 Hyper-V 管理器
- 在右侧单击“虚拟交换机管理器”
- 创建新的外部网络
- 给它一个简洁的名字
- 从下拉列表中选择您的网络设备(该设备必须具有活动连接!)
- 重启!
创建节点/机器
容器在主机上将具有 1:1 的端口映射,因此我们将为每个想要运行的容器创建一台机器。
- 创建一个瘦虚拟机(现在只做一个,然后根据需要对每个容器重复这些指令):
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
重复“创建节点/机器”步骤,创建所需数量的容器