Docker 容器日志占满磁盘,教你自动清理

问题现象

运行一段时间后,发现服务器磁盘报警,df -h显示/var/lib/docker目录占用异常高。
这往往是Docker容器日志文件(*-json.log)在无限增长。
如果手动删除这些日志文件,容器会报错,甚至导致日志丢失。
我们需要一种自动清理方案,既控制新日志的大小,又安全清理历史日志。

准备工作

  • 一台已安装Docker的Linux服务器(CentOS 7+或Ubuntu 18.04+)
  • 拥有root或sudo权限
  • 确认当前日志占用:du -sh /var/lib/docker/containers/*/*.log

配置全局日志自动清理

修改Docker守护进程配置文件/etc/docker/daemon.json(如果不存在则创建),加入以下内容:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

max-size表示单个日志文件最大10MB,max-file表示最多保留3个文件(轮转)。
保存后重启Docker:

sudo systemctl restart docker

注意:重启会使所有容器停止,建议提前规划业务低峰期。
如果不想重启,可以逐个容器配置--log-opt参数,但新配置只对新启动的容器生效。

安全清理已有日志

已存在的日志文件不会自动删除,需要手动清理。
不要直接rm日志文件,否则容器会出错。
正确做法是用truncate清空内容:

sudo find /var/lib/docker/containers/ -name "*.log" -exec truncate -s 0 {} \;

执行后立刻释放磁盘空间,且不影响容器正常运行。
或者对单个容器:

docker logs --tail 0 容器名 > /dev/null 2>&1

(此方法会保留最近0行日志,实则清空)推荐使用truncate命令,更直观。

效果验证与高频问题

  1. 查看磁盘是否释放df -h观察/var/lib/docker目录可用空间增大。
  2. 新日志是否受控:运行一个产生日志的容器,过一段时间检查日志文件大小:ls -lh /var/lib/docker/containers/<容器ID>/*.log,应不超过10MB。
  3. 为什么重启Docker后有些容器日志还在增长? 因为重启时已有容器被停止,日志驱动配置未生效?实际配置是全局的,容器重启后(比如重启Docker后容器也被重启)会应用新配置;如果容器未重启,旧容器仍在用原有配置。所以建议重启Docker后也重启容器(或重新创建容器)。
  4. 能直接删除日志文件吗? 绝对不要!删除文件后容器会丢失日志文件句柄,导致无法写日志,并不断报错。用truncate才安全。

避坑说明

  • 修改daemon.json前先备份:cp /etc/docker/daemon.json /etc/docker/daemon.json.bak
  • 如果Docker版本较旧(<19.03),部分参数可能不支持,请升级Docker。
  • 清理日志后建议同时启用Docker的日志轮转,并在系统层面配合logrotate(可选)避免长期积累。

现在你可以按照上述步骤,一键解决Docker容器日志占满磁盘的问题。
平常多留意磁盘监控,将日志清理做成自动化任务,省心不少。

分享到:
上一篇
宝塔面板免费 SSL 证书过期,教你一键续期
下一篇
服务器被挂马?教你快速清除恶意代码
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意