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 新建容器生效
已存在容器 删除并重新创建(需挂载卷保留数据) 让旧容器也受限制
相关推荐
mjhcsp5 小时前
DeepSeek V4.1 Flash 批量处理效能实测
java·前端·数据库
海绵宝宝转agent5 小时前
操作系统八股开源笔记分享
java·面试
更深兼春远6 小时前
第2篇:Dify 部署保姆级教程:用 Docker跑起来
docker·容器·dify
殷色玫瑰6 小时前
C++ string类详解:常用接口、字符串操作与模拟实现
java·linux·c语言·开发语言·数据结构·c++
CHEEVEN_QY6 小时前
新能源汽车电池托盘FSW量产的工艺稳定性控制
java·前端·汽车
惊讶的猫6 小时前
MCP-server
java
ZealSinger6 小时前
Boot4升级PostConstruct不跑了
java·spring boot·spring·升级迁移
Code_Solitude6 小时前
C语言:关于二维数组的作业总结
java·c语言·前端
Wang's Blog6 小时前
Java 项目实战: 外卖平台优化-Nginx六种负载均衡策略对比与选型
java·nginx·负载均衡
Wang's Blog7 小时前
Java 项目实战: 外卖平台优化-YApi接口管理平台与文档导入导出
java·开发语言·yapi