异常一
起因:前台反馈部署容器失败,进入服务器后发现docker无法启动
尝试重启服务(systemctl restart docker
),但是还是不行
出现以下状况
查看docker状态
使用dockerd查看,发现这是只读文件系统
将其重新挂载,重启服务
发现还是不行,dockerd一下
发现无法连接/run/containerd/containerd.sock
,启动失败次数太多导致停止启动
查了很多的解决办法,这一篇很OK:解决Linux docker启动不了的问题
这个方法来自Docker daemon and Containerd dockerd out of sync in 18.09 #421的issue
先将containerd停掉,再启动(直接重启不管用)
1 | systemctl stop containerd |
Linux中排查docker启动过程,可以通过如下思路:
1 | #查看docker的状态 |
异常二
error while creating mount source path ‘/data1’: mkdir /data1: file exists
可能是短时间多次重启导致
1 | Job for docker.service failed because start of the service was attempted too often. |
异常三
无法删除docker目录(rm: 无法删除”/var/lib/docker/overlay/XXXXXXXXXXXXXX/merged”: 设备或资源忙)
异常四
docker启动失败:Your kernel does not support cgroup memory limit
查看日志发现如下警告
1 | WARN Your kernel does not support cgroup memory limit |
解决方法
这是在ubuntu或其他基于Debian的系统上才会出现的问题,原因是系统默认未开启swap限制。(开启后会使系统内存占用多1%,性能下降约10%,即使没有运行docker)
修改系统的/etc/default/grub file文件,加一行
1 | GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1" |
上一步是固定的
下一步就多了
1 | Run: “sudo update-bootloader –refresh” |
或者是更新系统的GRUB:
1 | update-grub |
这应该是不通版本更新GRUB的方法吧
最后reboot
我是直接reboot的,然后就OK了
异常五
can’t create unix socket /var/run/docker.sock: is a directory
解决方法
1 | #保守点,把 docker.sock 重命名 |
卸载docker
列出docker所有的包
1
yum list installed|grep docker
删除docker的包
1
yum -y remove docker.x86_64 docker-client.x86_64 docker-common.x86_64
删除已有镜像和容器(慎重,根据需要执行)
1
rm -rf /var/lib/docker