神奇的DEBUG:因为异常导致MongoDB容器无法启动
2024-09-18 11:05:11
越来越多的项目使用docker进行环境搭建,统一了开发和运行环境,好处颇多。但同时也引入了许多复杂性,比如一些容器服务突然无法启动,那么debug起来就比物理机安装的服务麻烦一些。
这段时间Mac Pro经常出现莫名卡死的情况,我在没有办法的情况下只能强制关机,于是我遇到了再次开机后无法启动某个项目中的MongoDB容器的问题。
查看该mongoDB容器的日志,一大段非常复杂的输出,其中最重要的报错信息如下:
Fatal Assertion 28558 at src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp 365
Google了一波之后发现很多人遇到了类似的问题,都是因为之前异常中断了容器或者像我一样强制关机,导致mongoDB的本地数据中有一些破损的数据。所以需要对mongoDB进行修复。如果是物理机安装的话可以直接执行如下命令进行修复:
mongod --dbpath=/path/to/db --repair
而如果是像我一样,用docker-compose进行编排安装的mongodb,那么需要先单独运行mongodb容器并进入该容器,然后再执行修复命令。
假设我有如下的docker-compose.yml文件,其中mongodb的部分如下:
my-mongo:
container_name: my-mongo
image: mongo:5.0
ports:
- 27018:27017
volumes:
- .db/data:/data/db
healthcheck:
test: mongo --port 27017 --eval "db.serverStatus()" > /dev/null || exit 1
interval: 30s
timeout: 30s
retries: 10
那么我需要运行如下命令来单独运行mongodb容器:
docker-compose -f docker-compose.yml run -it my-mongo sh
然后可以顺利进入容器,在容器里面执行修复命令对破损的mongodb数据进行修复:
mongod --dbpath /data/db --repair
之后退出再重启mongodb容器就能正常运行了。所以面对突发的问题不能慌张,耐心去分析问题本质,思考之后再合理上网找到解决办法。
最新文章
- hibernate报ExceptionInInitializerError错误
- C++中int *p[4]和 int (*q)[4]的区别
- map中的erase成员函数用法
- java取得整数部分 代码
- css系列教程--css文件的创建
- 【百度地图API】建立全国银行位置查询系统(三)——如何在地图上添加银行标注
- 五分钟学习React(一): 什么是React
- JavaScript之中级教程关键
- ES 常用java api
- 【HNOI 2018】寻宝游戏
- html DOM簡介
- Beta版本项目计划
- corntab被黑记录
- echart折线图,柱状图,饼图设置颜色
- 用递归方法求 n!
- mysql的安装教程-【linux】
- java通过url抓取网页数据
- [HNOI2007][BZOJ1185] 最小矩形覆盖 [凸包+旋转卡壳]
- ionic3使用echart插件
- mysql 5.6 设置root初始密码正确步骤,避免入坑