docker服务启动失败常见问题汇总
场景1: 报错Non existing device xxx-thinpool和Unable to take ownership of thin-pool
问题背景
docker配置thinpool存储驱动启动服务。
现象描述
执行systemctl restart docker发现如下报错:

原因分析
这种通常是thinpool损坏导致的,需要进行thinpool的恢复和重建。
解决方案
可参考如下步骤对thinpool进行重建流程:
对于防止systemctl重启导致的恢复异常重建之前应将其关闭。
bashmv /usr/lib/systemd/system/docker.service /usr/lib/systemd/system/docker.service_bak删除/var/lib/docker目录下除hooks文件夹之外的所有文件。
bashcd /var/lib/docker/ rm -rf !(hooks)执行重建thinpool的操作。
bashlvremove /dev/docker/thinpool lvcreate --wipesignatures y -n thinpool docker -L 19g(95%VG) lvcreate --wipesignatures y -n thinpoolmeta docker -L 0.2g(1%VG) lvconvert -y --zero n -c 512K --thinpool docker/thinpool --poolmetadata docker/thinpoolmeta lvchange --metadataprofile docker-thinpool docker/thinpool打开之前操作的docker重拉。
bashmv /usr/lib/systemd/system/docker.service_bak /usr/lib/systemd/system/docker.service systemctl enable docker.service重启docker。
bashsystemctl start docker
systemctl status docker 结果中查看docker是否running。
场景2:systemd报错timeout
问题背景
正常启动docker.service服务。
现象描述
启动超时,导致dockerd服务启动失败:

原因分析
通常是docker服务启动时间太长,导致systemd拉起服务超时90s。
解决方案
这种情况一般是docker服务启动的时候需要清理的内容太多,可能的原因有容器数量太多或者环境cpu压力较大,建议拉长超时时间重试。
在/usr/lib/systemd/system/docker.service的[Service]添加
TimeoutSec=0。重启docker服务systemctl restart docker。
场景3:报错unable to configure the Docker daemon with file /etc/docker/daemon.json和unable to configure the Docker daemon with file /etc/sysconfig/docker
问题背景
修改docker daemon.json配置文件后重新启动docker服务。
现象描述
dockerd服务启动失败: 
原因分析及解决方案
一般是配置文件有问题,具体到报错中提示的文件中定位,找到错误的配置并修改即可。
场景4:systemctl status docker不打印日志,但是启动不了
问题背景
执行systemctl status docker命令查看docker服务日志。
现象描述
docker服务不打印日志,且启动失败:

原因分析及解决方案
原因1
一般出现于日志服务有问题的情况。
解决方案
检查rsyslog服务是否正常运行。
如果没有运行的话可以先重启日志服务。
根据docker服务启动的报错日志进行下一步定位。
原因2
/run被占满,docker出现过日志打印占满/run目录的问题。
解决方案
- 进入
/var/run/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/目录,执行du -sh *找到空间占用较大的目录 - 进入步骤1中找到的目录,执行
echo "" > log.json清空该异常日志文件,注意不能删除该文件,删除会导致容器运行异常。
场景5:dockerd链接/var/run/containerd/containerd.sock失败
问题背景
启动docker.service服务。
现象描述
docker服务启动失败并报错:

原因分析
该场景常见于在/var/run/containerd目录下存在非法的containerd.sock文件,比如该文件为一个失效的软链接的情况。
解决方案
删除错误文件并重启dockerd即可恢复。
场景6:创建/var/run/docker目录失败导致服务启动失败
问题背景
启动docker服务。
现象描述
服务启动失败并报错:

原因分析
常见于/var/run目录有问题的情况,比如软链接失效。
解决方案
使用ln命令重建软链接,重启docker服务恢复。
场景7:docker服务初始化,报错no space left
问题背景
启动docker服务。
现象描述
docker服务启动失败并报错:

原因分析
常见于给docker预留的存储空间被占满的情况:

解决方案
重新预分配,将给docker的存储空间增大。
场景8:containerd、containerd-shim、runc二进制权限不对导致docker服务无法启动
问题背景
启动docker服务。
现象描述
docker服务启动失败并报错:

原因分析及解决方案
从报错来看是找不到runc二进制,实际上是可执行权限被去掉导致的,修改为原本的的权限之后恢复。
更多常见相关问题可在后续继续补充。
遵循 木兰宽松许可证第2版(MulanPSL2)