越来越多的项目使用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容器就能正常运行了。所以面对突发的问题不能慌张,耐心去分析问题本质,思考之后再合理上网找到解决办法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:神奇的DEBUG:因为异常导致MongoDB容器无法启动 - Python技术站