Docker Swarm初始化后主机不可达问题(Windows Server 2016 Core)
Docker Swarm初始化后丢失物理网卡IP的解决方案
这个问题我碰到过好几次——Windows Server 2016 Core上启动Docker Swarm后物理网卡(Ethernet)的192.168.0.1丢失,本质是Docker自动创建HNS Transparent网络时,默认会接管物理网卡的IP配置,把原来的静态IP冲成了APIPA地址(169.254.x.x)。下面是具体的修复和预防步骤:
1. 先清理现有Swarm环境
首先得把出问题的Swarm集群和异常网络删掉:
- 强制退出Swarm:
docker swarm leave --force - 列出所有Docker网络:
docker network ls,找到名字带ingress或者transparent的异常网络(就是那个导致IP丢失的HNS网络) - 删除异常网络:
docker network rm <异常网络名称> - 用PowerShell确认网卡状态:
Get-NetIPAddress,此时应该能看到Ethernet网卡,但可能没有IP或者是错误的IP
2. 恢复物理网卡的静态IP
用PowerShell重新配置Ethernet网卡的静态IP:
# 设置IP地址和子网掩码(根据你的实际网络调整PrefixLength,比如24对应255.255.255.0) New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.0.1 -PrefixLength 24 -DefaultGateway 192.168.0.254 # 设置DNS服务器(替换成你的实际DNS地址) Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 8.8.8.8, 192.168.0.1
执行完后再用Get-NetIPAddress -InterfaceAlias "Ethernet"确认192.168.0.1已经恢复。
3. 手动创建兼容的透明网络(关键步骤)
避免Docker自动创建网络时抢占IP,我们提前手动创建一个绑定到物理网卡的透明网络:
docker network create -d transparent ` --opt com.docker.network.windowsshim.interface="Ethernet" ` --subnet 192.168.0.0/24 ` --gateway 192.168.0.254 ` --ip-range 192.168.0.100/28 ` my-swarm-transparent
参数说明:
--opt com.docker.network.windowsshim.interface="Ethernet":强制将透明网络绑定到你的物理网卡,Docker不会修改该网卡的原有IP--subnet和--gateway要和你的本地网络完全匹配--ip-range指定Docker可以分配给容器的IP段,不要包含你的物理网卡IP(192.168.0.1)
4. 重新初始化Swarm集群
这次用我们手动创建的网络来初始化,避免自动创建的网络干扰:
docker swarm init --advertise-addr 192.168.0.1 --data-path-addr 192.168.0.1 --ingress-network my-swarm-transparent
参数说明:
--advertise-addr:Swarm管理节点对外通信的地址(必须是物理网卡IP)--data-path-addr:容器间数据传输的地址,和管理地址保持一致即可--ingress-network:指定我们手动创建的透明网络作为Swarm的 ingress 网络,替代Docker默认创建的网络
5. 验证配置是否生效
- 查看Swarm节点状态:
docker node ls,应该能看到当前节点是Leader状态 - 再次检查网卡IP:
Get-NetIPAddress -InterfaceAlias "Ethernet",确认192.168.0.1依然存在 - 从同一网络的其他机器ping 192.168.0.1,测试连通性;也可以用
docker node inspect self查看节点的管理地址是否正确
额外注意事项
- 建议升级Docker版本:Windows Server 2016对应的Docker EE版本尽量用17.06及以上,早期版本的网络兼容性问题更多
- 防火墙规则:确保物理网卡的防火墙允许Swarm所需端口:2377/tcp(管理通信)、7946/tcp/udp(节点间通信)、4789/udp(Overlay网络数据)
- Hyper-V虚拟机设置:如果是虚拟机,确保网卡设置为外部网络(允许管理操作系统共享此网络适配器),避免网络隔离导致的IP问题
内容的提问来源于stack exchange,提问作者Miroslav Adamec
相关产品推荐
相关产品推荐

