• 异常断电文件损坏docker服务异常处理


    问题场景

    • 我们在某地部署信控平台,当初是在产品研发早期,采取的还是Windows服务器部署虚拟机的方式
    • 使用virtualbox导入centos7虚拟机,虚拟机里运行docker服务,使用docker-compose统一管理
    • 客户今天上午反馈,昨天断电了两次,平台没有自动重启没有启动起来,收到执行启动命令也卡主不动
    • 卡主的位置,对应的一条语句是docker network create signal-network,创建网络
      在这里插入图片描述

    解决

    container

    • 看着页面卡主了,检查了下内存占用和磁盘空间,都没问题,重复执行还是卡主
    • 首先让维保人员,把虚拟机关掉,又重启了一次,毕竟重启解决大部分问题
    • 重启后,还是不行,然后怀疑docker服务有问题,执行docker -v 发现也没反应,还是卡主,确定是docker服务有问题了
      在这里插入图片描述
    • 执行docker服务的重启命令systemctl restart docker,还是不行
    • 想着要先想办法把docker关掉,再启动试试,于是试着分开命令执行,还是不行
    systemctl stop docker
    systemctl stop docker.socket
    systemctl stop docker.service
    systemctl stop docker
    systemctl restart docker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 使用 journalctl - xe查看报错信息,发现containerd没启动起来,使用命令systemctl status containerd也是一样,加上-l查看详细信息
      在这里插入图片描述
    • 这个时候知道事情不简单了,感觉应该是断电导致文件损坏了,先去网上搜索下,解决这个containerd
    • 异常断电,文件损坏,一般都是正在读写的文件,于是按照搜索结果,删除containerd的文件夹里的文件执行命令,containerd 可以了
    rm -rf /var/lib/containerd/*
    systemctl restart containerd
    
    • 1
    • 2

    在这里插入图片描述

    docker服务

    • 继续执行docker服务的重启命令systemctl restart docker,还是不行,头大,卡在了启动过程systemctl docker activating (start) ,一直启动不起来
      在这里插入图片描述

    • 感觉像是启动过程中卡主卡死了,于是想着把进程ps -ef|grep docker直接干掉kill -9 xxx xxx ...,再启动试试,还是不行

    • 想着containerd 都解决了,也是实在不想重装虚拟机,就继续搜索解决。systemctl status docker -l继续查看详细报错信息
      -
      在这里插入图片描述

    • 想着是不是网络问题,搜索结果里也有些说是防火墙影响的,先关闭防火墙systemctl stop firewalld,重启虚拟机,再启动docker解决,我试了下,不行

    • 此时docker -v可以了,有输出了,以为好了,很高兴

    • 试了下其他命令如docker images,还是不行,会报错Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon
      在这里插入图片描述

    • systemctl status docker -l查看status,发现新的报错start request repeated too quickly for docker.service
      在这里插入图片描述

    • 使用journalctl -u docker.service继续查看更详细的日志,发现启动某个容器时报错了,就去把容器文件夹都删了,还是不行

    • 没招了,重装系统是不可能的,就把docker卸载了,然后重装,可以了

    rm -rf /var/lib/docker
    
    yum remove docker-ce docker-ce-cli containerd.io
    
    rm -rf /etc/docker
    rm -rf /etc/systemd/system/docker.service.d
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 此处还有两个小插曲,一是可能没删干净,准备的rpm包,不能使用命令rpm -ivh *.rpm一次性安装完成,只能一个个执行
    • 第二是,这种重装会将已有的镜像和容器全部删干净,如果没有备份镜像或将可变数据映射到本地卷,数据就会丢失了
    • 我们所有要的数据,都映射到其他目录了,所以可以放心删除和重装,镜像也都有现成的,重新装载即可

    数据库服务

    • docker搞定后,发现PostgreSQL数据库文件也损坏了,数据库启动不了,找不到 checkpoint
      在这里插入图片描述

    • 幸好,我每天都对数据库文件夹全量备份,删掉现有的,还原即可

    • 坑爹的是,第一次还原时,忘了把数据库停掉,还原的文件也不对,只好重来

    • 数据库关闭,文件夹情况,还原备份文件,搞定

    后续

    • 异常断电,容易造成损坏,Windows服务器套虚拟机更是如此,一定要做好备份工作
      在这里插入图片描述
      在这里插入图片描述

    • 下次如果再出问题,导出一份数据库后,直接还原到这个日期就行

    • 再把数据库也导进去,就是最新状态了(其他缓存和队列里的数据无所谓)

  • 相关阅读:
    Hive经典面试题(三)——间隔连续问题
    「Qt Widget中文示例指南」如何创建一个计算器?(一)
    当前 Python 版本中所有保留字keyword.kwlist
    TRichView添加Android演示和实时拼写建议
    赫夫曼树
    11个销售心理学方法,帮你搞定客户!
    处理uniapp打包后有广告的问题
    医院管理系统数据库,课程设计,SQLserver,纯代码设计
    2022“杭电杯”中国大学生算法设计超级联赛(3)
    阿里巴巴中国站获得淘口令真实url API 返回值说明
  • 原文地址:https://blog.csdn.net/u010882234/article/details/134274879