linux docker日志占满磁盘主因是容器日志默认不轮转、不限大小,需从清理(用truncate清空而非rm)、限制(单容器或全局配置json-file的max-size和max-file)、监控(定期统计日志大小、分区使用率)三方面解决。

Linux 上 Docker 日志占满磁盘,核心是容器日志默认不轮转、不限大小,长期运行后 /var/lib/docker/containers/**/*-json.log 文件会持续膨胀。解决需从清理、限制、监控三方面入手。
快速释放已占磁盘空间
先定位大日志文件并清空(注意:不能直接 rm,Docker 进程仍持有句柄,磁盘空间不会释放):
- 查最大日志:
du -sh /var/lib/docker/containers/*/*-json.log | sort -hr | head -10 - 清空指定日志:
truncate -s 0 /var/lib/docker/containers/<container-id>/<container-id>-json.log</container-id></container-id> - 批量清空所有日志(谨慎执行):
find /var/lib/docker/containers/ -name '*-json.log' -exec truncate -s 0 {} \;
永久限制单个容器日志大小和数量
在 docker run 或 docker-compose.yml 中配置日志驱动参数,推荐使用 json-file 驱动并启用轮转:
- 命令行启动时加参数:
--log-driver json-file --log-opt max-size=10m --log-opt max-file=3 - Docker Compose 示例:
services: app: image: nginx logging: driver: "json-file" options: max-size: "10m" max-file: "3" - 生效后新容器日志单个不超过 10MB,最多保留 3 个历史文件(即最多 30MB)
全局配置所有新容器默认日志策略
修改 Docker 守护进程配置,让所有后续创建的容器自动继承日志限制:
- 编辑
/etc/docker/daemon.json(若不存在则新建): - 加入以下内容(示例限制为 20MB/5个文件):
{ "log-driver": "json-file", "log-opts": { "max-size": "20m", "max-file": "5" } } - 重启 Docker:
systemctl restart docker(旧容器不受影响,仅对新创建的容器生效)
日常监控与预防建议
避免问题复发,建议建立简单检查机制:
- 定期查看日志总占用:
du -sh /var/lib/docker/containers/*/*-json.log | awk '{sum += $1} END {print sum/1024/1024 " MB"}' - 将日志路径加入
df监控范围,比如监控/var/lib/docker所在分区使用率 - 生产环境慎用
docker logs -f长时间挂起,尤其当日志量大时可能阻塞或本地缓存激增 - 如需详细日志分析,建议接入 ELK、Loki 或直接配置容器输出到 syslog/rsyslog,脱离 JSON 日志文件依赖










