越来越多的项目使用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容器就能正常运行了。所以面对突发的问题不能慌张,耐心去分析问题本质,思考之后再合理上网找到解决办法。

最新文章

  1. hibernate报ExceptionInInitializerError错误
  2. C++中int *p[4]和 int (*q)[4]的区别
  3. map中的erase成员函数用法
  4. java取得整数部分 代码
  5. css系列教程--css文件的创建
  6. 【百度地图API】建立全国银行位置查询系统(三)——如何在地图上添加银行标注
  7. 五分钟学习React(一): 什么是React
  8. JavaScript之中级教程关键
  9. ES 常用java api
  10. 【HNOI 2018】寻宝游戏
  11. html DOM簡介
  12. Beta版本项目计划
  13. corntab被黑记录
  14. echart折线图,柱状图,饼图设置颜色
  15. 用递归方法求 n!
  16. mysql的安装教程-【linux】
  17. java通过url抓取网页数据
  18. [HNOI2007][BZOJ1185] 最小矩形覆盖 [凸包+旋转卡壳]
  19. ionic3使用echart插件
  20. mysql 5.6 设置root初始密码正确步骤,避免入坑

热门文章

  1. MFC-创建MFC图形界面dll
  2. 微信小程序制作日常生活首页
  3. 齐博X1到底是个什么鬼?
  4. 28.解析器Parser
  5. Linux--多线程(一)
  6. 一、Go语言开篇介绍
  7. 第2-2-4章 常见组件与中台化-常用组件服务介绍-分布式ID-附Snowflake雪花算法的代码实现
  8. Vue3 企业级优雅实战 - 组件库框架 - 5 组件库通用工具包
  9. Huawei OJ 题解 - 1. A + B Problem - Go 参考解答
  10. 金山云:基于 JuiceFS 的 Elasticsearch 温冷热数据管理实践