问题描述
docker无法启动,报错:"Job for docker.service failed because the control process exited with error code"
这个问题网上有很多解决方案,但是试了很多没有解决,遂记下可以解决自己问题的方案以供参考。
在解决过程中出现过多种报错:
failed to start daemon, ensure docker is not running or delete /var/run/docker.pid: process with PID 24464 is still running
failed to start daemon: error while opening volume store metadata database (/var/lib/docker/volumes/metadata.db): timeout
原因分析:
问题分析:docker是由守护进程(daemon)和客户端组成的,一般运行报错带有
daemon
的时候,可能是守护进程出了问题,或者修改了守护进程的配置文件。同样的,启动不了也可能是守护进程出了问题。
解决方案:
再尝试了各种配置没有问题后,且docker确实已经停止运行了,那就只好用
dockerd
来排查问题了。因为要启动docker,一般需要先启动docker的守护进程。
原因:dockerd
就是守护进程,负责管理 Docker 容器、镜像、网络和存储等核心功能。当你在命令行中使用docker
命令时,实际上是在与dockerd
守护进程进行通信。
实践开始:
#输入命令:
dockerd
#报错:
INFO[2024-05-08T18:07:11.413186406+08:00] Starting up
failed to start daemon, ensure docker is not running or delete /var/run/docker.pid: process with PID 24464 is still running
#根据提示,确保docker关闭了,删除这个文件
rm /var/run/docker.pid
#再检查dockerd
dockerd
# 如果没有报错,就可以去启动docker了,我还有以下的报错:
INFO[2024-05-08T20:40:06.361088244+08:00] Starting up
failed to start daemon: error while opening volume store metadata database (/var/lib/docker/volumes/metadata.db): timeout
# 我是通过输入下面的命令解决的
ps axf | grep docker | grep -v grep | awk '{print "kill -9 " $1}' | sudo sh
# 再次检查
dockerd
# 没有报错了 `crtl + c` 或者 `crtl + z`退出
# 重启docker
systemctl start docker
如果后续使用docker不能正常运行,一使用docker命令就报错ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
那请看另一篇文章docker无法使用,报错无法连接守护进程。