从日志里找根因
守护进程起不来时先读日志:journalctl -u docker 会给出第一条错误,常见的有 daemon.json 语法错误、存储驱动不可用、监听地址或套接字被占用、目录权限异常。日志要从最早的那条错误读起,后面的报错大多是连带效应。需要更细的输出时可以先停掉服务,在前台以调试模式短时启动,观察完整输出后再恢复。
基本信息
| 查看状态 | systemctl status docker --no-pager |
|---|---|
| 读取日志 | journalctl -u docker -n 100 --no-pager |
| 前台调试 | systemctl stop docker 后执行 dockerd --debug |
| 恢复服务 | 改好配置后 systemctl start docker |
典型使用场景
- 改过 daemon.json 后服务起不来:优先怀疑配置文件语法
- 磁盘或目录被调整过:检查数据目录的属主与权限
- 升级后启动失败:确认存储驱动与内核支持是否匹配
- 端口或套接字冲突:机器上有旧的守护进程或其他程序占用
- 自动化部署失败:把日志采集进发布脚本,减少人工登录排查
定位步骤
定位步骤
# 先看服务状态概览
systemctl status docker --no-pager | head -20
# 读最近的日志,从第一条错误看起
journalctl -u docker -n 100 --no-pager | tail -40
# 需要完整输出时短时前台启动
systemctl stop docker
dockerd --debug
# 校验配置文件语法后再启动
systemctl start docker && docker info | head -5常见根因对照
| 日志线索 | 根因 | 处理 |
|---|---|---|
| JSON 解析类报错 | 配置文件语法不正确 | 用 json 校验工具核对后再重启 |
| address already in use | 监听地址或套接字被占用 | 确认旧进程与占用端口的程序 |
| 驱动或存储类报错 | 存储驱动与后端文件系统不匹配 | 核对驱动配置与内核支持 |
| 权限与属主报错 | 数据目录属主或权限异常 | 恢复属主与最小权限 |
前台调试仅用于排查:结束后按 Ctrl+C 退出再启动服务,避免与托管实例抢套接字。
生产上重启守护进程会中断全部容器(未开启容器存活保留时),修复前先提示影响窗口并确认业务可接受。