Docker日志自动清理配置:新手也能搞定的磁盘空间救星

为什么Docker日志会撑爆磁盘

很多新手用Docker跑服务后,隔段时间发现磁盘快满了,一查往往是容器日志占了大量空间。
默认情况下,Docker会无限记录标准输出日志(stdout),写入宿主机的 /var/lib/docker/containers/<容器ID>/ 目录下,生成类似 *-json.log 的大文件。
如果不加限制,一个高并发的服务几天就能吃掉几十GB,甚至导致服务崩溃。通过Docker日志自动清理配置,我们可以让日志自动限制大小和数量,彻底解决这个隐患。

操作前需要确认的两件事

  1. 有root权限或sudo能力 – 因为要修改Docker守护进程配置文件。
  2. 确认Docker版本 – 新版Docker(17.05+)才支持 max-sizemax-file 参数,低版本需要升级。

检查Docker版本命令(终端执行):

docker --version

如果版本过低,先升级Docker(参考官方文档或你的系统包管理器)。

手把手配置Docker日志自动清理

核心思路是修改 daemon.json,这是Docker守护进程的全局配置文件。
默认不存在,需要自己创建。

1. 编辑配置文件

执行命令(使用nano或vim均可,这里用nano示例):

sudo nano /etc/docker/daemon.json

2. 写入日志配置项

在文件中写入以下JSON内容(注意语法严格,不要有多余逗号):

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
  • log-driver:日志驱动,保持默认 json-file
  • max-size:单个日志文件的最大大小,这里设为10MB,按需调整(如 20m50m)。
  • max-file:最多保留的文件个数,设为3,意思是日志到10MB后会自动滚动,保留最近3个文件。

3. 重启Docker服务使配置生效

sudo systemctl restart docker

重启后系统会短暂中断所有容器运行,请在业务低峰进行操作。
如有重要服务,建议提前通知。

4. 验证新配置被加载

docker info | grep -i logging

回显中应该看到 Logging Driver: json-file 以及相关参数。

注意: 该配置只对新创建的容器生效,已运行的容器需要重建或手动修改日志选项。
如果你想让现有容器也使用新配置,可以删除容器后用 docker run 重新创建,或者单独为容器指定日志参数(不推荐手动改json)。

几个容易踩的坑

  • JSON格式错误daemon.json 必须是合法JSON,建议用在线校验工具检查。常见错误:多写一个逗号、少写一个引号,导致Docker启动失败。
  • 重启影响服务systemctl restart docker 会停掉所有容器,如果依赖容器做数据库等关键任务,务必先备份或确认可短时中断。
  • 未注意磁盘用量 – 即使设置了自动清理,极端情况(如日志写入速度超过轮转速度)仍可能撑爆磁盘,建议配合监控和告警。
  • 日志驱动被修改 – 如果你有其他日志采集需求(如ELK),可能需要使用 gelffluentd 驱动,此时 max-size / max-file 无效。切记配置前确认当前驱动。

验证清理效果

方法一:查看日志文件大小

先找一个运行中的容器ID:

docker ps

然后进入容器日志目录(注意替换 <容器ID> 为实际ID):

ls -lh /var/lib/docker/containers/<容器ID>/<容器ID>-json.log

如果配置生效且日志已轮转,你会看到多个文件(如 *-json.log*-json.log.1*-json.log.2),且每个都不超过10MB。

方法二:用dmesg或docker events观察

执行以下命令,然后运行一个会产生大量日志的容器(比如 docker run busybox sh -c "while true; do echo test; sleep 0.1; done"),观察控制台输出是否有文件旋转信息(部分驱动会记录)。
不过最简单还是看文件大小。

常见问题快问快答

  • 配置后日志还是很大? 检查是否重启了Docker,以及确认容器是重启后新建的。如果容器是重启前创建,需要重建。
  • 我想对单个容器设置不同日志大小 – 可以在 docker run 时加参数:--log-opt max-size=5m --log-opt max-file=2,优先级高于全局配置。
  • 会不会影响容器性能? 轮转会带来极小的IO开销,几乎可忽略。
  • 需要定期手动清理旧日志吗? 如果配置合理(如max-size=10m, max-file=3),自动清理足够。但长远看建议配合系统logrotate或用docker system prune清理无用对象。

总结

通过修改 /etc/docker/daemon.json 并添加 max-sizemax-file 参数,Docker日志自动清理配置就完成了。
这是保护服务器磁盘最直接有效的方法之一。
如果你正在处理Docker日志自动清理配置,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
定期检查磁盘使用情况,配合监控工具,你的Docker环境就能健康运行下去。

分享到:
上一篇
Docker容器自启动设置方法:新手也能轻松掌握的3种方式
下一篇
Docker镜像瘦身优化减小体积
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意