Docker一键清理 + 全局限制,告别日志报满

问题现象

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、id+1.json、id+2.json),超过则自动删除最旧的。

② 重启 Docker 服务使配置生效:

复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker

⚠️ 注意 :该配置只对新建的容器生效 ,已经存在的容器需要重建 (重新 docker run)才会应用新限制。


总结
场景 方法 适用情况
紧急释放磁盘空间 运行清理脚本 临时救急
长期预防 修改 daemon.json 配置 max-size/max-file 新建容器生效
已存在容器 删除并重新创建(需挂载卷保留数据) 让旧容器也受限制
相关推荐
jaysee-sjc1 分钟前
【苍穹外卖】Day10:定时任务与 WebSocket 实时提醒实战
java·开发语言·javascript·数据库·vue.js·websocket·网络协议
独隅5 分钟前
Claude 高效应用实战指南
android·java·开发语言·claude·claude code
WJ.Polar11 分钟前
异常、泛型、集合、Stream流
java·数据结构
牧瀬クリスだ11 分钟前
Redis五大数据类型全解析:从入门到实战
java·数据库·redis·后端·缓存
Nuanyt23 分钟前
LeetCode Hot 100 · 双指针 3 题 Java
java·笔记·算法·leetcode·双指针
Wang's Blog29 分钟前
Java 项目实战: 交友项目 - 圈子互动
java·开发语言·交友
Rain的Java大神之路30 分钟前
北漂 13 年,我把 Java 家底钉成了这张知识图谱(全站免费)
java·后端·程序员
Web3&Basketball1 小时前
从0到1落地AI Agent沙箱隔离Docker实战:踩坑全记录
运维·docker·容器·agent·容器安全·沙箱隔离
wuminyu1 小时前
JVM规范学习总结-Class文件结构
java·linux·c语言·jvm·c++
七夜zippoe1 小时前
Spring AI + Ollama 本地模型:数据不出内网的合规方案(落地全流程)
java·人工智能·spring·ai·ollama