📌 问题描述
在使用VMware虚拟机运行CentOS系统,并在其中部署了Docker容器(如MySQL和Nacos)时,发现每次将虚拟机挂起并恢复后,Docker容器中的MySQL服务无法连接。即使重启Docker服务或容器,问题仍然存在,只有重启整个虚拟机才能暂时解决。
🔍 问题分析
此问题的根本原因在于NetworkManager服务在虚拟机挂起和恢复过程中对Docker的网络接口(如docker0
)进行了管理,导致Docker网络配置异常。具体表现为:
-
docker0
网桥被NetworkManager接管,状态变为unmanaged
。 -
Docker容器之间的网络通信中断,MySQL等服务无法连接。
✅ 解决方案
为防止NetworkManager管理Docker的网络接口,需要修改NetworkManager的配置文件,使其忽略Docker相关的网络设备。
1. 修改NetworkManager配置文件
编辑/etc/NetworkManager/NetworkManager.conf
文件,在文件末尾添加以下内容:
[keyfile]
unmanaged-devices=interface-name:docker0;interface-name:br-*;interface-name:veth*;interface-name:vmnet*;interface-name:vboxnet*
上述配置指示NetworkManager忽略以docker0
、br-
、veth
、vmnet
和vboxnet
开头的网络接口,防止其对Docker网络进行干预。
2. 重启NetworkManager服务
使配置生效,需要重启NetworkManager服务:
sudo systemctl restart NetworkManager
3. 重启Docker服务
随后,重启Docker服务以重新初始化Docker网络:
sudo systemctl restart docker
4. 验证Docker网络状态
使用以下命令检查docker0
网桥的状态,确保其正常运行:
ip addr show docker0
输出中应包含docker0
的IP地址和状态信息,表示网桥已成功恢复。
📝 总结
通过上述配置,NetworkManager将不再管理Docker的网络接口,从而避免了虚拟机挂起和恢复后Docker网络异常的问题。此方法适用于在VMware虚拟机中运行Docker容器的场景,确保容器间的网络通信稳定可靠。
希望这篇文章能帮助您解决在VMware虚拟机中使用Docker时遇到的网络问题。如果您有其他相关问题,欢迎在评论区留言讨论。