Multipass虚拟机初始化Docker Swarm出现IP相关报错如何解决
问题解决方法
报错根因
你收到的报错是因为docker swarm init命令中指定的10.173.198.201并不是node1虚拟机本身实际绑定的网卡IP,Docker无法找到对应IP完成绑定操作。
第一步:验证虚拟机真实IP
先执行以下命令查看node1的实际IP地址:
multipass info node1
从输出的IPv4字段获取虚拟机当前的有效IP。
修复Swarm初始化命令
两种可选方案,任选其一即可:
- 方案1:替换为虚拟机真实IP
假设查询到的node1真实IP为192.168.64.8,执行如下命令即可:
multipass exec node1 -- /bin/bash -c 'docker swarm init --advertise-addr 192.168.64.8:2377 --listen-addr 0.0.0.0:2377'
listen-addr设置为0.0.0.0:2377表示监听本机所有网卡的2377端口,无需指定固定IP。
- 方案2:直接指定网卡名称
不需要手动查询IP,直接指定虚拟机内的网卡名称(Multipass创建的实例默认网卡一般为eth0),Docker会自动读取该网卡的IP完成配置:
multipass exec node1 -- /bin/bash -c 'docker swarm init --advertise-addr eth0:2377'
如何创建IP不含0段的Multipass实例
可以实现,两种操作方式:
- 临时指定IP创建实例
创建实例时通过--network参数手动指定需要的IP段,示例如下(需要提前配置好本地桥接网卡对应网段的路由):
multipass launch --network name=bridged,mode=manual,ip=192.168.64.10/24,gateway=192.168.64.1 --name node1
- 永久修改默认分配网段
修改Multipass的网络配置文件:- macOS路径:
/var/root/Library/Application Support/multipassd/network.yaml - Linux路径:
/var/snap/multipass/common/data/multipassd/network.yaml
在配置中添加/修改dhcp_range参数为你需要的非0段,示例:
- macOS路径:
dhcp_range: 192.168.64.10,192.168.64.200
修改完成后重启multipassd服务,后续新创建的实例都会自动分配该网段的IP。
内容的提问来源于stack exchange,提问作者Shamir Imtiaz
相关产品推荐
相关产品推荐

