千家信息网

Windows利用Swarm原生Docker集群踩坑总结

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,环境:角色机器名称操作系统IP备注MaterWeb30Windows Server 2016 GUI192.168.2.30安装最新推荐补丁NodeWeb31Windows Server 2016 C
千家信息网最后更新 2026年11月04日Windows利用Swarm原生Docker集群踩坑总结

环境:

角色机器名称操作系统IP备注
MaterWeb30Windows Server 2016 GUI192.168.2.30安装最新推荐补丁
NodeWeb31Windows Server 2016 Core192.168.2.31安装最新推荐补丁
NodeWeb32Windows Server 2016 Core192.168.2.32安装最新推荐补丁


第一坑:Windows Server 2016 Core

1.操作系统分区坑

由于我们使用的Windows镜像都是基于microsoft/windowsservercore大小都在10G左右,还需要安装IIS、aspnet等等,另外如果涉及到镜像导出也会占用C盘空间,如果是做Docker的话建议C盘空间不小于60G,或者干脆只分C盘。

踩坑解决办法:在硬盘还有大量富余空间的情况下,可采用挂载文件夹的形式,挂载C:\ProgramData\docker\windowsfilter文件夹


2.命令行如何设置机器IP及机器名称及开启远程桌面

在CMD命令提示符下执行sconfig即可,建议开启远程桌面方面命令输入

3.安装Docker之前一定需要安装最新的Windows补丁

方法:sconfig--->6)下载并安装更新--->R)仅搜索推荐的更新---->A)安装所有


4.文件如何复制到Windows Server Core下,在命令行下

打开可写共享

cd \

mkdir share

net share share=c:\share /grant:everyone,full

连接共享

net use z: \\192.168.2.30\share password /user:administrator

于是就映射共享到Z盘,进入Z盘即可操作文件

删除共享

net share c:\share /del /y


5.在Windows命令行如何查看文件

type filename.txt

追加文件

echo 127.0.0.1 web30 >>\windows\system32\drivers\etc\hosts


6.查看Windows进程

tasklist


7.杀死进程

tskill


第二坑:Windows 2016原生Docker

1.Windows安装Docker

在命令提示符出入powershell,

Install-Module -Name DockerMsftProvider -Repository PSGallery -ForceInstall-Package -Name docker -ProviderName DockerMsftProvider

如果第二部提示未安装补丁,则需要安装最新Windows补丁,输入sconfig第6步

安装完成之后重启服务器


2.配置所有服务器的防火墙规则

TCP 端口 2377 用于群集管理通信

TCP 和 UDP 端口 7946 用于节点间通信

TCP 和 UDP 端口 4789 用于覆盖网络通信

netsh advfirewall firewall add rule name="swm 2377" dir=in action=allow protocol=TCP localport=2377 netsh advfirewall firewall add rule name="swm 7946" dir=in action=allow protocol=TCP localport=7946netsh advfirewall firewall add rule name="swm 7946udp" dir=in action=allow protocol=UDP localport=7946netsh advfirewall firewall add rule name="swm 4789" dir=in action=allow protocol=TCP localport=4789netsh advfirewall firewall add rule name="swm 4789udp" dir=in action=allow protocol=UDP localport=4789


3.初始化群集模式

在Master上执行

C:\> docker swarm init --advertise-addr=192.168.2.30 --listen-addr 192.168.2.30:2377

坑:在Linux上执行docker swarm init即可初始化集群,但是在Windows上会卡住不动,在windows上需要指定IP及端口


4.加入集群(在Web31和Web32执行)

在上面提示输入

docker swarm join \    --token SWMTKN-1-1lbjx00s1qsjbjfuoq92f6d95mf41arbhwbkkigmo1smjqs38r-8i0bdakwhc3lvbbog8fnmvgmw \    192.168.2.30:2377

即可加入集群,注意此处需要修改为一行

docker swarm join --token SWMTKN-1-1lbjx00s1qsjbjfuoq92f6d95mf41arbhwbkkigmo1smjqs38r-8i0bdakwhc3lvbbog8fnmvgmw 192.168.2.30:2377

坑1:加入集群命令只可以用一行,不可以使用\来进行换行

坑2:一定要在防火墙打开相应的规则,打开2377/TCP、7946/TCP、7946/UDP、4789/TCP、4789/UDP端口

坑3:目前测试Linux可以加入Windows Swarm集群,Windows也可以加入Linux Swarm集群,经过测试我将Linux节点加入Windows Swarm集群是正常工作的,但是Linux Swarm Master管理Windows节点报错,不知是否跟版本存在关系


在Windows Swarm Master节点上执行

docker service create --name=ping --constraint "Node.Platform.OS==Linux" --network=myspace centos ping 127.0.0.1


注意:--constraint "Node.Platform.OS==Linux"一定是双引号,不能是单引号,否则报Error response from daemon: rpc error: code = 2 desc = key ''node.Platform.OS' is invalid



5.服务端口映射问题

在Linux环境下我们可以通过

docker service create -name web -p 80:80 nginx

在执行之后各个节点都可以通过80端口进行服务,但是在Windows是不行的

docker service create -name iis -p 80:80 microsoft/iis执行之后是无法通过80端口访问

目前是通过

docker service create -name iis -p mode=host,target=80,published=80,protocol=tcp microsoft/iis


然后通过docker service ps iis

C:\Users\Administrator>docker service ps iisID            NAME   IMAGE                 NODE   DESIRED STATE  CURRENT STATE        ERROR  PORTSe118tf9vu15l  iis.2  microsoft/iis:latest  Web32  Running        Running 2 hours ago         *:8090->80/tcp

可以看到容器在Web32上,这个时候访问192.168.2.32:8090即可正常访问,但是访问主机的8090端口是无法使用的


6.Docker私有仓库配置

配置私有仓库

方法1:更改注册表[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Docker]

修改为C:\Program Files\Docker\dockerd.exe --run-service --insecure-registry "192.168.2.234:5000"

方法2:修改Docker配置文件,建议修改配置文件

C:\ProgramData\docker\config\daemon.json

{

"insecure-registries" : ["192.168.2.234:5000"]

}

如果没有该文件可以创建以ASSIC形式


7.Windows Docker开启远程端口访问

方法一:注册表修改Docker启动参数

C:\Program Files\Docker\dockerd.exe --run-service -D -H tcp://0.0.0.0:2375 -H npipe://

方法二:修改Docker daemon.json配置文件

{    "hosts": ["tcp://0.0.0.0:2376", "npipe://"]}



文件 端口 集群 命令 补丁 配置 方法 节点 推荐 提示 服务 建议 机器 空间 输入 通信 操作系统 一行 仓库 可以通过 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 花魁咖啡 上海卓越科技互联网 互联网科技公司经营范围 山东特亿宝互联网科技有限公司 深圳互联网络科技有限公司 极限挑战互联网科技 奇酷互联网络科技公司 善班互联网科技有限公司 赫美联合互联网科技 万达互联网科技 深圳卡尔迅互联网科技有限公司怎么样 隆华科技工业互联网 广州优美互联网科技 中国航天科技大学国际工业互联网 互联网行业科技股 互联网科技公司营业执照怎么办理 版纳互联网科技选哪家 艺电能源互联网科技有限公司招聘 科技互联网公司两年变化 前海云享互联网科技 互联网科技企业 河南云网互联网络科技有限公司 广州百单互联网科技有限公司 科技赋能下的互联网金融 唐信互联网科技 大连 联恩商钥互联网科技有限公司 青岛中康互联网医疗科技有限公司 互联网科技的前景 广东猫王互联网科技有限公司电话 利用互联网等科技手段
0