
问题现象Docker 容器在运行过程中默认会无限追加日志存储在/var/lib/docker/containers/目录下。时间一长几十 GB 的日志文件轻松占满磁盘导致服务异常、甚至服务器宕机。先来查查到底是哪些容器日志在“搞鬼”du -d1 -h /var/lib/docker/containers | sort -h输出示例50G /var/lib/docker/containers/a5f6... 46G /var/lib/docker/containers/c00c... 36G /var/lib/docker/containers/ff83...看到这些数字是不是心都凉了半截别急马上处理问题起因根本原因在于Docker 的默认日志配置Docker 默认使用的日志驱动是json-file它会将容器内标准输出stdout/stderr的内容全部写入宿主机的.json日志文件。这个驱动默认没有开启日志轮转log rotation也就是说只要容器在运行日志就会无休止地追加直到占满整个磁盘分区。再加上容器内运行的业务程序可能频繁打印日志比如访问日志、调试输出或者日志级别设置得过低都会让日志量急剧膨胀。一句话总结不是 Docker 不聪明是默认没给它设“天花板”。所以我们要么手动清要么给它定规矩——下面两种方案分别对应这两种思路。一次性清理临时救急如果只是想快速释放空间可以用下面这个脚本一键清空所有容器日志。创建clean_docker_logs.sh脚本#!/bin/bash echo start clean docker containers logs logs$(find /var/lib/docker/containers/ -name *-json.log) for log in $logs do echo clean logs : $log cat /dev/null $log done echo end clean docker containers logs 赋予执行权限并运行chmod x clean_docker_logs.sh ./clean_docker_logs.sh执行完再查看du -sh /var/lib/docker/containers # 输出148K /var/lib/docker/containers瞬间清爽但这只是治标不治本日志还会继续增长我们需要永久控制。永久限制容器日志大小通过修改 Docker 守护进程配置让所有新建容器自动遵守日志大小限制。① 编辑配置文件/etc/docker/daemon.json若不存在则新建{ log-driver: json-file, log-opts: { max-size: 50m, max-file: 3 } }配置说明max-size: 50m单个日志文件最大 50 MB。max-file: 3保留最近 3 个日志文件即id.json、id1.json、id2.json超过则自动删除最旧的。② 重启 Docker 服务使配置生效sudo systemctl daemon-reload sudo systemctl restart docker⚠️注意该配置只对新建的容器生效已经存在的容器需要重建重新docker run才会应用新限制。总结场景方法适用情况紧急释放磁盘空间运行清理脚本临时救急长期预防修改daemon.json配置max-size/max-file新建容器生效已存在容器删除并重新创建需挂载卷保留数据让旧容器也受限制