在一次 Rocket.Chat + MongoDB 的 Docker 升级过程中,遇到 MongoDB 无法启动并自动退出的问题。最终确认,是因为 未设置 setFeatureCompatibilityVersion(FCV)导致的启动失败。这篇文章将完整记录问题日志、错误分析与解决过程,希望为大家避坑提供参考。
🧩 问题现象
在使用 Docker 启动 MongoDB 7.0 时,容器没有正常运行,而是立即触发了 shutdown 流程。日志如下:
jsonCopyEdit{"msg":"Shutting down the IndexBuildsCoordinator"}
{"msg":"Shutting down the storage engine"}
{"msg":"WiredTiger closed"}
{"msg":"Now exiting"}
{"msg":"Shutting down","attr":{"exitCode":62}}
最后一行:
jsonCopyEdit"exitCode":62
❓ Exit Code 62 是什么?
exitCode: 62 在 MongoDB 中表示:
EX_UNCAUGHT (62)
MongoDB 初始化过程中发生了未捕获异常(uncaught exception),导致服务终止。
通常这意味着配置或数据存在兼容性问题。
🔍 问题原因:未设置 FCV(setFeatureCompatibilityVersion)
经过检查,发现是 在升级 MongoDB 到 7.0 后,未设置 featureCompatibilityVersion(FCV) 导致系统拒绝启动。
在升级 MongoDB 时,必须手动设置版本兼容性,否则系统会因版本不匹配而崩溃退出。
✅ 解决方案
只需在 MongoDB 运行时手动执行以下命令即可:
javascriptCopyEditdb.adminCommand({
setFeatureCompatibilityVersion: "7.0",
confirm: true
})
执行成功后,MongoDB 将正式启用 7.0 所需的内部结构,并能正常启动。
🛠 排查路径小结
| 步骤 | 内容 |
|---|---|
| ✅ 查看日志 | 发现启动过程中直接触发 shutdown |
| ✅ 检查挂载与权限 | 无问题,读写正常 |
✅ 检查 .lock 文件 | 无残留 |
| ✅ 怀疑 WiredTiger 数据损坏 | 否定,repair 无效 |
| ✅ 最终定位 | 缺少 FCV 设置,MongoDB 拒绝以不确定状态启动 |
📘 为什么需要手动设置 FCV?
MongoDB 的 featureCompatibilityVersion 控制数据库的行为与内部结构,确保新版本启动不会破坏旧数据结构。如果没有设置,系统处于“不确定版本状态”,MongoDB 会为避免数据损坏而终止运行。
这是 MongoDB 的版本安全保护机制,尤其在涉及副本集或分片集群时,设置 FCV 是强制要求。
✍ 结语
这次问题表面上是 Exit Code 62 的常规错误,但实质上是一次升级流程未执行关键步骤的问题。如果你也在使用 Docker 升级 MongoDB,务必记得:
✅ 升级版本后,执行
setFeatureCompatibilityVersion!
避免莫名其妙的启动失败,节省大量排查时间。