问题场景
- 我们在某地部署信控平台,当初是在产品研发早期,采取的还是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
- 使用 journalctl - xe查看报错信息,发现containerd没启动起来,使用命令systemctl status containerd也是一样,加上-l查看详细信息
  
- 这个时候知道事情不简单了,感觉应该是断电导致文件损坏了,先去网上搜索下,解决这个containerd
- 异常断电,文件损坏,一般都是正在读写的文件,于是按照搜索结果,删除containerd的文件夹里的文件执行命令,containerd可以了
rm -rf /var/lib/containerd/*
systemctl restart containerd

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
- 此处还有两个小插曲,一是可能没删干净,准备的rpm包,不能使用命令rpm -ivh *.rpm一次性安装完成,只能一个个执行
- 第二是,这种重装会将已有的镜像和容器全部删干净,如果没有备份镜像或将可变数据映射到本地卷,数据就会丢失了
- 我们所有要的数据,都映射到其他目录了,所以可以放心删除和重装,镜像也都有现成的,重新装载即可
数据库服务
-  docker搞定后,发现 PostgreSQL数据库文件也损坏了,数据库启动不了,找不到 checkpoint
  
-  幸好,我每天都对数据库文件夹全量备份,删掉现有的,还原即可 
-  坑爹的是,第一次还原时,忘了把数据库停掉,还原的文件也不对,只好重来 
-  数据库关闭,文件夹情况,还原备份文件,搞定 
后续
-  异常断电,容易造成损坏,Windows服务器套虚拟机更是如此,一定要做好备份工作 
  
  
-  下次如果再出问题,导出一份数据库后,直接还原到这个日期就行 
-  再把数据库也导进去,就是最新状态了(其他缓存和队列里的数据无所谓) 



















