故障排查

Docker 容器日志过大问题处理

定位磁盘异常占用并配置 json-file 日志轮转,避免事故复发。

现象与定位#

容器日志默认可能持续增长。典型现象是 /var/lib/docker/containers 占满系统盘,但 docker system df 看不出全部日志体积。

bash
df -hT
du -xhd1 /var/lib/docker | sort -h
find /var/lib/docker/containers -name '*-json.log' -printf '%s %p
' | sort -nr | head
docker inspect --format '{{.Name}} {{.HostConfig.LogConfig.Type}} {{json .HostConfig.LogConfig.Config}}' $(docker ps -q)

配置日志轮转#

Docker 官方 json-file 驱动支持 max-size 与 max-file。守护进程默认值写入 /etc/docker/daemon.json,选项值必须是字符串。

json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "20m",
    "max-file": "5",
    "compress": "true"
  }
}

也可以只对关键服务配置:

yaml
services:
  app:
    logging:
      driver: json-file
      options:
        max-size: "20m"
        max-file: "5"

让配置真正生效#

新默认值不会自动应用到已有容器。验证 JSON 后重启 Docker,并逐个重建业务容器。

bash
jq . /etc/docker/daemon.json
systemctl restart docker
docker compose up -d --force-recreate
docker inspect --format '{{json .HostConfig.LogConfig}}' app

参考 Docker json-file 日志驱动文档。应用侧仍应输出结构化日志,并避免在错误循环中每毫秒打印同一异常;轮转只能限制损失,不能替代根因修复。

GK / OPS NOTES
把每一次变更写成可以复现的步骤

示例命令请先在测试环境验证,再根据自己的系统版本、网络和备份策略调整。

讨论区 31

分享你的经验、补充或不同观点。支持 Markdown 基础语法。

讨论区暂时为空,欢迎分享你的经验。