调整 Docker Engine 日志级别旨在排查问题时平衡日志详略,默认 info 级,调试可临时设为 debug;需通过 systemd 配置修改,不支持 daemon.json;日志由 journald 管理,可用 journalctl 过滤查看。

调整 Docker Engine 日志级别,核心目的是在排查问题时获取更详细或更精简的日志信息,避免日志过载或关键线索缺失。默认日志级别为 info,适合日常运行;调试时可临时调至 debug,但不建议长期启用。
查看当前日志级别
Docker Engine 的日志级别由 systemd(Linux)或 Windows 服务配置决定,不在 docker info 或 API 返回结果中直接体现。可通过以下方式确认:
- 检查 systemd 配置:
sudo systemctl cat docker,查找ExecStart行是否含--log-level=debug等参数 - 查看运行中的进程参数:
ps aux | grep dockerd,观察启动命令是否有--log-level - 若使用
/etc/docker/daemon.json,该文件不支持log-level字段(这是常见误区),该配置仅作用于容器日志驱动,不影响 daemon 自身日志级别
修改日志级别(Linux systemd 环境)
需通过 systemd 覆盖配置生效,操作步骤如下:
- 创建覆盖目录:
sudo mkdir -p /etc/systemd/system/docker.service.d - 新建配置文件,如
/etc/systemd/system/docker.service.d/log-level.conf,内容为:
ExecStart=
ExecStart=/usr/bin/dockerd -l debug --log-level=debug
注意:ExecStart= 先清空默认值,再重新指定完整命令;-l 和 --log-level 功能等价,任选其一即可。
- 重载并重启:
sudo systemctl daemon-reload && sudo systemctl restart docker - 验证:执行
sudo journalctl -u docker -n 20 -f,观察是否输出大量 debug 类型日志(如“Calling GET /v1.41/info”、“event published”等)
日志输出位置与过滤技巧
Docker daemon 日志默认由 journald 收集(systemd 环境),不写入 /var/log/docker.log 等传统路径(除非显式重定向):
- 实时跟踪最新日志:
sudo journalctl -u docker -n 50 -f - 按级别过滤(如只看 error):
sudo journalctl -u docker -p 3(priority 3 = err) - 结合关键词快速定位:
sudo journalctl -u docker | grep -i "failed\|timeout\|panic" - 导出最近 1 小时日志用于分析:
sudo journalctl -u docker --since "1 hour ago" > docker-debug.log
典型故障场景与日志线索对照
不同问题在 debug 日志中常表现为特定模式,可针对性扫描:
- 容器无法启动:关注 “containerd: failed to create task”、“OCI runtime create failed”、“no such file or directory”(镜像层损坏或存储驱动异常)
- 拉取镜像失败:搜索 “pulling from registry”,留意 “unauthorized”(认证失败)、“net/http: request canceled”(网络超时)、“invalid manifest”(镜像格式不兼容)
- API 调用无响应:检查 “http: panic”、“failed to serve http”、“context deadline exceeded”,可能关联资源耗尽或插件卡死
-
守护进程意外退出:日志末尾通常有 “stopping event stream”、“shutting down”、“signal terminated”;若无正常关闭记录,需查系统 OOM killer 日志(
dmesg -T | grep -i "killed process")

















