journalctl 是排查 docker 启动失败最直接有效的工具,它记录 systemd 管理下所有启动过程、权限拒绝、配置解析失败等事件;通过 -u docker.service 查日志、-p 3 筛 error 级别、--since 定时间、grep 抓关键词,并结合 systemctl status 和 dockerd --test 验证配置,可快速定位根因。

直接看 journalctl 是最准的,不用翻日志文件或猜路径。Docker 由 systemd 管理时,所有启动过程、权限拒绝、配置解析失败、二进制找不到等问题,都会被 journal 记录下来。
用 journalctl 查看完整启动日志
运行以下命令,获取 Docker 服务最近一次启动的全部输出:
-
sudo journalctl -u docker.service—— 查看完整日志流 -
sudo journalctl -u docker.service -n 100—— 只看最后 100 行,适合快速定位末尾错误 -
sudo journalctl -u docker.service --since "2 minutes ago"—— 查看最近两分钟内的日志,配合刚执行的systemctl start docker
过滤关键错误线索
日志量大时,可加过滤缩小范围:
-
sudo journalctl -u docker.service | grep -i "failed\|error\|cannot\|permission\|mask"—— 抓常见失败关键词 -
sudo journalctl -u docker.service -p 3 -x—— 只显示优先级为“error”及以上的结构化日志(-p 3 对应 err)
检查 systemd 单元是否被禁用或依赖异常
有些报错不体现在日志里,而是状态本身已说明问题:
-
systemctl status docker—— 看第一行状态(如 masked、not-found、inactive (dead)),以及 “Loaded” 行是否显示配置路径 - 若显示 masked,说明服务被显式屏蔽,需先执行
sudo systemctl unmask docker - 若提示 Failed to load 或路径不存在,检查
/usr/lib/systemd/system/docker.service或/etc/systemd/system/docker.service是否损坏或被误删
验证 Docker 配置文件语法(常被忽略)
daemon.json 写错一个逗号,dockerd 就会静默退出:
-
sudo dockerd --config-file /etc/docker/daemon.json --debug --test—— 不启动服务,只校验配置并输出详细错误位置 - 若没报错但仍启动失败,再试:
sudo dockerd --debug --log-level=debug,观察控制台输出(此时需另开终端,避免阻塞)











