Docker日志自动清理配置:新手也能搞定的磁盘空间救星
为什么Docker日志会撑爆磁盘
很多新手用Docker跑服务后,隔段时间发现磁盘快满了,一查往往是容器日志占了大量空间。
默认情况下,Docker会无限记录标准输出日志(stdout),写入宿主机的 /var/lib/docker/containers/<容器ID>/ 目录下,生成类似 *-json.log 的大文件。
如果不加限制,一个高并发的服务几天就能吃掉几十GB,甚至导致服务崩溃。通过Docker日志自动清理配置,我们可以让日志自动限制大小和数量,彻底解决这个隐患。
操作前需要确认的两件事
- 有root权限或sudo能力 – 因为要修改Docker守护进程配置文件。
- 确认Docker版本 – 新版Docker(17.05+)才支持
max-size和max-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,按需调整(如20m、50m)。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),可能需要使用
gelf或fluentd驱动,此时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-size 和 max-file 参数,Docker日志自动清理配置就完成了。
这是保护服务器磁盘最直接有效的方法之一。
如果你正在处理Docker日志自动清理配置,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
定期检查磁盘使用情况,配合监控工具,你的Docker环境就能健康运行下去。