Docker容器日志级别由应用自身日志框架控制,Docker仅采集不干预;Daemon日志级别需通过systemd配置--log-level参数设置,二者作用对象与配置方式完全不同。

调整 Docker 容器日志级别,核心是分清两个不同对象:一是 Docker Daemon(dockerd)自身 的日志级别;二是 容器运行时输出的日志 的级别。两者配置方式、作用范围和生效位置完全不同,混淆会导致设置无效。
一、容器日志级别:由日志驱动控制,不直接设“debug/info”
容器本身没有“log-level=debug”这种全局日志级别开关。所谓“容器日志级别”,实际取决于:
- 应用进程自己打印的日志等级(如 Spring Boot 的 logback.xml、TiDB 的 log.level);
- Docker 日志驱动如何采集和存储这些输出(如 json-file、journald),但不改变内容的详细程度。
也就是说:Docker 不会过滤或降级你程序 print("debug info") 这类输出——它照单全收。真正能干预的,是日志的存储方式与保留策略:
-
限制单个日志文件大小:用
max-size(如"10m")防止无限增长; -
限制历史日志份数:用
max-file(如"5")实现自动轮转清理; -
指定日志驱动:如改用
syslog或journald,便于集中收集。
配置位置(三选一):
-
全局生效:写入
/etc/docker/daemon.json:{"log-driver":"json-file","log-opts":{"max-size":"10m","max-file":"5"}} -
单容器生效:启动时加参数:
docker run --log-opt max-size=10m --log-opt max-file=5 nginx -
Compose 生效:在
docker-compose.yml中:logging: {driver: "json-file", options: {max-size: "10m", max-file: "5"}}
二、Docker Daemon 日志级别:调试 dockerd 问题才需调
这是指 dockerd 进程自身的运行日志(如拉镜像、启容器、调 containerd 的内部行为)。默认为 info,排查 daemon 异常时可临时设为 debug。
-
不支持通过
/etc/docker/daemon.json设置(该文件里的"log-level"是常见误解,实际被忽略); - 必须通过 systemd 启动参数修改(主流 Linux 发行版)。
操作步骤:
- 新建覆盖配置:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/log-level.conf <<'EOF'<br> [Service]<br> ExecStart=<br> ExecStart=/usr/bin/dockerd --log-level=debug<br> EOF
- 重载并重启:
sudo systemctl daemon-reload && sudo systemctl restart docker - 验证:
sudo journalctl -u docker -n 20 -f—— 应看到大量Calling POST /v1.41/containers/create类 debug 行。
三、怎么查当前用的是什么配置?
别猜,动手查:
- 看 daemon 日志级别:
sudo systemctl cat docker | grep ExecStart或ps aux | grep dockerd | grep -o '\-\-log-level=[^[:space:]]*' - 看某容器的日志驱动和选项:
docker inspect myapp | jq '.HostConfig.LogConfig' - 看实际日志文件路径和大小:
docker inspect myapp | grep LogPathls -lh $(docker inspect -f '{{.LogPath}}' myapp)
四、生产环境建议
原则是:容器日志重“控量”,daemon 日志重“按需”。
- 容器侧:全局配
max-size=10m + max-file=5,避免磁盘打满; - Daemon 侧:日常保持
info,出问题再切debug并及时切回; - 敏感服务(如数据库、中间件):优先在应用层关掉 debug 日志,比依赖 Docker 拦截更可靠。


















