虚拟机挂起,重启后主机连接不上虚拟机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 或容器即可恢复。

相关推荐
虎头金猫5 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
小白男神5 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
分布式存储与RustFS5 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
这个DBA有点耶5 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
wuyk5555 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
kybs19916 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
玉&心6 天前
通过Arthas在线诊断K8S中的内存及JVM等使用情况
docker·k8s·arthas
xing-xing6 天前
Docker容器中Nginx站点根目录网页配置访问
nginx·docker
程序猿_极客6 天前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统
guo_wen_qiang6 天前
上传本地镜像到harbor中
docker·容器·持续部署