2026-06-30 后端启动异常排查记录
记录对象:jzo2o本地开发环境/ VMware CentOS7-101.68 / Docker中间件
一、问题概述
2026-06-30 反馈:前一天后端仍可正常启动,当天由于虚拟机需要重新登录并重新启动容器,之后后端无法启动。本次排查覆盖 Windows 宿主机、IntelliJ 运行状态、VMware 虚拟机、Docker 容器、Nacos / Redis / MySQL 健康状态以及 Nacos 配置来源。
二、最终结论
- 本次后端启动失败不是 Java 代码改动导致,而是虚拟机中间件环境异常导致。
- Redis 已被排除:容器内 `redis-cli -a redis ping` 返回 `PONG`,日志显示 `Ready to accept connections`。
- MySQL 已基本被排除:容器内 `mysqladmin -uroot -p ping` 返回 `mysqld is alive`。
- 真正的直接故障点是 Nacos:容器内访问 `127.0.0.1:8848` 被拒绝,日志明确报错 `No DataSource set`,说明 Nacos 数据源初始化失败,服务没有真正启动成功。
- 由于所有后端服务依赖 Nacos 进行配置获取与服务注册,Nacos 未启动成功会直接导致本地后端全部无法正常拉起。
三、原因归纳
通过 `docker inspect nacos` 确认,当前 Nacos 使用虚拟机中的挂载文件 `/data/soft/nacos/conf/application.properties` 作为真实配置源;同时容器内不存在有效的 `custom.properties` 补充配置,也没有注入 `MYSQL_SERVICE_*` 环境变量。在此状态下,Nacos 启动阶段出现 `No DataSource set`,表明其数据库连接配置在运行时未被正确初始化,从而导致 8848 端口未监听成功。
四、排查过程纪要
序号 | 阶段 | 执行结果/结论 |
1 | 用户描述现象 | 用户说明 2026-06-29 后端仍可启动,2026-06-30 虚拟机重新登录并重启容器后,后端无法启动。 |
2 | 宿主机初查 | 从 Windows 侧看到 Redis 客户端提示 `Can not read response from server`,初步怀疑中间件环境异常。 |
3 | 项目侧复现 | 检查 IDEA 运行状态与 Spring Boot 模块后,确认问题集中在依赖的基础环境,而不是纯编译错误。 |
4 | 虚拟机容器状态检查 | 在 VMware 中看到 Redis、Nacos、MySQL 等容器均处于 `Up` 状态,但宿主机访问 8848/3306/6379 的应用层响应不一致。 |
5 | Redis 验证 | 进入 redis 容器执行 `redis-cli -a redis ping` 返回 `PONG`,并看到 Redis 日志 `Ready to accept connections`。 |
6 | MySQL 验证 | 进入 mysql 容器执行 `mysqladmin -uroot -p ping` 返回 `mysqld is alive`。 |
7 | Nacos 验证 | 进入 nacos 容器访问 `127.0.0.1:8848` 被拒绝,说明 Nacos 服务本身没有成功监听。 |
8 | Nacos 日志取证 | 从 Nacos 日志中定位到 `No DataSource set` 与 `dumpservice bean construction failure` 异常。 |
9 | 配置来源定位 | 通过 `docker inspect nacos` 确认真实配置来自挂载文件 `/data/soft/nacos/conf/application.properties`。 |
10 | 环境变量与补充配置检查 | 确认 nacos 容器未注入 `MYSQL_SERVICE_*` 环境变量,且 `custom.properties` 不存在、`init.d/custom.properties` 仅有注释。 |
11 | 最终归因 | 确定本次后端启动失败的直接原因是 Nacos 数据源初始化失败,导致 Nacos 无法提供配置中心/注册中心能力。 |
五、关键证据摘录
- 宿主机初始症状:访问 192.168.101.68 时 Redis/ Nacos / MySQL 的应用层响应异常,说明问题集中在虚拟机环境,而非 IDE 本身。
- Redis 证据:Redis 容器内 `PONG` + `Ready to accept connections`,可确认 Redis 正常。
- MySQL 证据:MySQL 容器内 `mysqld is alive`,说明数据库主进程正常存活。
- Nacos 证据:容器内 curl 8848 被拒绝;日志报 `Nacos Server did not start because dumpservice bean construction failure : No DataSource set`。
- 配置来源证据:`docker inspect nacos` 显示 `/data/soft/nacos/conf/application.properties` 挂载到 `/home/nacos/conf/application.properties`,这是本次运行的实际配置来源。
- 配置补充缺失证据:`MYSQL_SERVICE_*` 环境变量无输出,`/home/nacos/conf/custom.properties` 不存在,`/home/nacos/init.d/custom.properties` 仅有注释。
六、建议处理方式
- 若目标是最快恢复开发环境,重新导入此前可正常启动的原始虚拟机文件是最稳妥的办法。
- 如继续在当前虚拟机修复,应优先恢复 Nacos 的可用数据源配置,并保证其在容器重启后仍能稳定注入。
- 在后续恢复后,建议先按顺序验证 `docker ps`、Nacos 8848、Redis `PONG`、MySQL `mysqld is alive`,再启动后端服务。
附录:提供的截图证据
以下截图按今天的排查时间线顺序附上,作为本次定位过程中的原始证据留存。
图1 codex-clipboard-ce03fdb7-3c42-487b-b40e-af71bc4d31ae.png
Windows侧测试到192.168.101.68的Redis连接异常,客户端提示服务端在返回完整响应前断开连接。
图2 codex-clipboard-0098c9fe-a86e-4d00-ba46-c225deee8b7c.png
在虚拟机内执行`docker exec -it redis redis-cli -a redis ping`,Redis返回`PONG`,确认Redis容器本身可用。
图3 codex-clipboard-168f0209-df5e-4d2f-ae12-55131717b53e.png
在nacos容器内访问`127.0.0.1:8848`被拒绝,说明Nacos服务未成功监听8848端口。
图4 codex-clipboard-ce991ad3-4b2d-4400-96f2-ca67ac08e305.png
Redis日志显示`Ready to accept connections`,进一步排除Redis作为本次故障根因。
图5 codex-clipboard-e8b96d40-9e90-4e13-a08e-962f45263214.png
Nacos日志截取,显示容器启动过程在反复拉起Java进程但未形成可用服务。
图6 codex-clipboard-a91ef6cf-01ee-4f14-ac21-1842d5379c72.png
MySQL容器日志显示entrypoint启动信息,为后续单独验证MySQL状态提供线索。
图7 codex-clipboard-cb7435d6-c8e6-499a-afc0-37401eb99b7f.png
Nacos启动栈报错:`Nacos Server did not start because dumpservice bean construction failure : No DataSource set`。
图8 codex-clipboard-7d2ad3a4-1a1d-443a-9444-17271092d2de.png
同一异常截图的补充部分,再次确认Nacos失败点在数据源初始化,而非Redis或后端代码编译。
图9 codex-clipboard-292dbe3c-7ec2-4e0e-bd19-8134597dc491.png
Nacos容器内`ps -ef`可见Java进程仍存在,说明容器是`Up`状态,但应用没有健康启动完成。
图10 codex-clipboard-adfb2a63-e347-4dc9-b0f4-799343af39a0.png
在nacos容器内尝试用`ss -lntp | grep 8848`检查监听时,由于命令输入有误未得到有效结果。
图11 codex-clipboard-31934948-3133-4379-8efb-2698f4a9493d.png
MySQL容器内执行`mysqladmin -uroot -p ping`返回`mysqld is alive`,确认MySQL服务本身可用。
图12 codex-clipboard-c4f744eb-0ffe-43b1-9147-7a6ac38e0809.png
查看nacos容器`/home/nacos/conf`,只有`application.properties`、日志配置和SQL脚本,没有单独的`custom.properties`。
图13 codex-clipboard-fb179e35-0e2f-480e-8d8d-2496e54e0208.png
容器内`application.properties`显示Nacos数据源依赖MySQL配置项,包含`db.url.0`、`db.user`、`db.password`等字段。
图14 codex-clipboard-d9222f29-f665-4d87-a68c-50c02148dce4.png
确认`/home/nacos/conf/custom.properties`不存在,排除了通过该文件补充数据源配置的可能。
图15 codex-clipboard-f5a06727-7dcc-4ec1-ab65-f1b25fdaeac2.png
查看`/home/nacos/init.d/custom.properties`,内容均为注释,未提供实际MySQL数据源参数。
图16 codex-clipboard-095df110-d6f1-439c-b9f7-00fdadb4bedd.png
执行`docker exec -it nacos env | grep MYSQL_SERVICE"`时,由于误加引号,shell进入补全状态,提示后续命令需要重输。
图17 codex-clipboard-bd1c762a-7508-44c3-bd3f-30bd714a06a0.png
重新执行环境变量检查后,`MYSQL_SERVICE_*`无任何输出,说明nacos容器未注入这组环境变量。
图18 codex-clipboard-d169bb3c-53c7-4780-8ea6-b5a223eb209c.png
进一步查看挂载到主机路径后的`application.properties`内容,确认当前运行时使用的就是该文件中的Nacos/MySQL配置。
图19 codex-clipboard-4ab61418-3d31-4ab6-b4d7-5f31d5310ffc.png
通过`docker inspect nacos`确认nacos容器镜像、启动参数和挂载关系:`/data/soft/nacos/conf/application.properties`是真实生效配置源。