生产环境磁盘空间不足,如何清理Docker容器日志并保留近30天日志?
Docker容器日志相关问题解答
一、容器日志清理方案
你无法cd进入/var/lib/docker/containers是因为该目录默认仅root用户有权限访问,所有操作加sudo即可执行:
- 按需保留最近30天日志,清理更早的过期日志:
执行命令:
命令中sudo find /var/lib/docker/containers/ -name "*-json.log" -mtime +30 -delete-mtime +30代表筛选修改时间超过30天的文件,匹配后直接删除。 - 应急清空所有容器日志(快速释放磁盘空间,无历史日志保留需求时使用):
执行命令:
该命令仅将日志文件大小截断为0,不会删除文件,不影响运行中容器写入日志。sudo sh -c 'truncate -s 0 /var/lib/docker/containers/*/*-json.log' - 长期避免日志占满磁盘的配置方案:
配置Docker全局日志轮转规则,修改/etc/docker/daemon.json文件(如果文件不存在可直接创建),添加如下配置:
参数说明:{ "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3", "max-age": "30d" } }max-size限制单个日志文件最大为100M,max-file限制最多保留3个轮转日志文件,max-age限制日志最多保留30天。配置完成后执行命令生效:
注意:该配置仅对新创建的容器生效,已有容器需要重建后才会应用该日志规则。sudo systemctl daemon-reload && sudo systemctl restart docker
二、查看容器日志生成时间
- 查看日志文件的最后更新时间(对应日志中最后一条记录的生成时间):
执行命令:
输出结果中的时间字段即为对应日志文件的最后修改时间。sudo ls -lh /var/lib/docker/containers/*/*-json.log - 查看具体容器的日志时间范围:
使用Docker原生命令即可查看,无需访问容器目录,比如查看某容器最近30天的日志:
输出的每条日志开头默认自带时间戳。docker logs --since 720h <容器ID或容器名称> - 批量查看所有容器日志的最早、最晚生成时间:
需提前安装jq工具解析JSON格式的容器日志,执行命令:sudo sh -c 'for log in /var/lib/docker/containers/*/*-json.log; do echo "日志路径: $log"; echo "最早日志时间: $(head -n1 $log | jq -r '.time')"; echo "最晚日志时间: $(tail -n1 $log | jq -r '.time')"; echo "---"; done'
内容的提问来源于stack exchange,提问作者Tiago Silva
相关产品推荐
相关产品推荐

