虚拟机挂起,重启后主机连接不上虚拟机docker中的mysql?(docker网络状态假死)

在docker中创建了一个mysql容器,docker是在一个centos的vm虚拟机里的,把虚拟机挂起,第二天打开电脑开启虚拟机,主机却连接不到docker中创建的mysql了,这是什么情况?

虚拟机挂起(suspend)后再恢复,Docker 容器网络状态"假死" ,导致宿主机(或外部)连不上 MySQL。核心原因不是 MySQL 挂了,而是网络栈没恢复好


✅ 现象总结

  • VM 挂起 → 第二天恢复 → 主机连不上 Docker MySQL
  • 容器可能还在运行,但端口映射失效或网络断连

🔍 根本原因

虚拟机挂起(suspend)会冻结整个系统状态,包括:

  • 网络接口(eth0、docker0、veth pair)
  • NAT 表、iptables 规则
  • Docker 的网络命名空间

恢复后,Docker 的网络栈没有重新初始化,导致:

  • 端口映射(-p 3306:3306)失效
  • 容器 IP 不可达
  • 主机访问 VM_IP:3306 超时

✅ 解决方案(任选其一)

✅ 方法 1:重启 Docker 服务(推荐)

在 VM 里执行:

bash 复制代码
sudo systemctl restart docker

这会重新初始化 Docker 的网络栈 ,容器会自动重启(如果你用了 --restart=always),然后端口映射就恢复了。

✅ 方法 2:重启容器

如果你不想重启整个 Docker,可以只重启容器:

bash 复制代码
docker restart <mysql_container_name>
✅ 方法 3:避免挂起,改用关机

虚拟机挂起 容易出这种网络问题,建议用正常关机保存快照代替挂起。


🔍 验证恢复

在主机上执行:

bash 复制代码
telnet <VM_IP> 3306

bash 复制代码
mysql -h <VM_IP> -P 3306 -u root -p

能连上就说明恢复了。


✅ 建议

  • 给 MySQL 容器加 --restart=always,防止意外停掉

  • 如果频繁挂起 VM,考虑用 Host 网络模式--network host),减少 NAT 层:

    bash 复制代码
    docker run --network host -e MYSQL_ROOT_PASSWORD=xxx mysql:8

✅ 总结一句话

VM 挂起后 Docker 网络"假死",重启 Docker 或容器即可恢复。

相关推荐
云飞云共享云桌面22 分钟前
SolidWorks服务器+云飞云共享云桌面 = 10人共享方案
linux·运维·服务器·网络·制造
cui_ruicheng7 小时前
MySQL(四):数据类型与字段设计
数据库·mysql
皮皮学姐分享-ppx8 小时前
政府绿色采购数据库(2015-2024.3)
大数据·网络·数据库·人工智能·制造
W_chuanqi8 小时前
联想M7615DNA网络打印方法
网络·联想·打印机网络连接
DIY源码阁10 小时前
JavaSwing航班订票管理系统 - MySQL版
数据库·mysql
正经教主11 小时前
【docker基础】第五课:Docker网络详解
运维·docker·容器
HavenlonLabs12 小时前
硬件 + SaaS 产品的工程化路径:从系统架构、PCB 设计到工程样机
网络·安全·架构·系统架构·安全架构
鹤鸣的日常12 小时前
前端运行时动态环境变量方案
前端·react.js·docker·前端框架·vue·gitlab
流星白龙13 小时前
【MySQL高阶】26.事务(1)
数据库·mysql
这个DBA有点耶14 小时前
索引优化深潜(下):索引合并、ICP 与索引设计的实战法则
数据库·mysql·架构