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

问题场景

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

解决

container

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

异常断电文件损坏docker服务异常处理_第4张图片

docker服务

  • 继续执行docker服务的重启命令systemctl restart docker,还是不行,头大,卡在了启动过程systemctl docker activating (start) ,一直启动不起来
    异常断电文件损坏docker服务异常处理_第5张图片

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

  • 想着containerd 都解决了,也是实在不想重装虚拟机,就继续搜索解决。systemctl status docker -l继续查看详细报错信息
    异常断电文件损坏docker服务异常处理_第6张图片
    异常断电文件损坏docker服务异常处理_第7张图片

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

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

  • 试了下其他命令如docker images,还是不行,会报错Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon
    异常断电文件损坏docker服务异常处理_第8张图片

  • systemctl status docker -l查看status,发现新的报错start request repeated too quickly for docker.service
    异常断电文件损坏docker服务异常处理_第9张图片

  • 使用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
  • 此处还有两个小插曲,一是可能没删干净,准备的rpm包,不能使用命令rpm -ivh *.rpm一次性安装完成,只能一个个执行
  • 第二是,这种重装会将已有的镜像和容器全部删干净,如果没有备份镜像或将可变数据映射到本地卷,数据就会丢失了
  • 我们所有要的数据,都映射到其他目录了,所以可以放心删除和重装,镜像也都有现成的,重新装载即可

数据库服务

  • docker搞定后,发现PostgreSQL数据库文件也损坏了,数据库启动不了,找不到 checkpoint
    异常断电文件损坏docker服务异常处理_第10张图片

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

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

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

后续

  • 异常断电,容易造成损坏,Windows服务器套虚拟机更是如此,一定要做好备份工作
    异常断电文件损坏docker服务异常处理_第11张图片
    异常断电文件损坏docker服务异常处理_第12张图片

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

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

你可能感兴趣的:(异常报错,docker,容器,运维)