应使用 truncate 清空 docker 日志以避免中断容器运行,推荐结合启动时日志限制(max-size/max-file)或配置 daemon.json 全局策略,并辅以 du/journalctl 排查异常根源。
清理 docker 日志文件释放磁盘空间,关键在“不中断容器运行”和“避免反复手动操作”。直接删日志文件可能无效(因文件描述符仍被占用),推荐用 truncate 清空或从源头限制日志增长。
快速清空单个容器日志(临时应急)
适用于某容器日志暴涨、急需释放空间的场景。日志文件路径固定:
- 先查容器 ID:
docker ps -a - 定位日志文件:
ls -lh /var/lib/docker/containers/<container-id>/<container-id>-json.log</container-id></container-id> - 安全清空(保留文件句柄,不影响运行):
sudo truncate -s 0 /var/lib/docker/containers/<container-id>/<container-id>-json.log</container-id></container-id>
⚠️ 不要用 rm 或 echo >,前者可能不释放空间,后者可能破坏文件描述符导致日志写入失败。
批量清空所有容器日志(脚本化操作)
适合定期维护或批量处理多个高日志量容器:
- 创建脚本
/usr/local/bin/clean-docker-logs:
for id in $(docker ps -q); do
log_file="/var/lib/docker/containers/${id}/${id}-json.log"
if [ -f "$log_file" ]; then
sudo truncate -s 0 "$log_file"
echo "Cleared $log_file"
fi
done
- 赋予执行权限:
chmod +x /usr/local/bin/clean-docker-logs - 运行:
clean-docker-logs
从源头限制日志大小(长期有效)
最根本的方案:让日志自动轮转、不无限制增长。分两种方式:
-
启动容器时指定日志策略:
docker run -d --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 nginx
→ 每个日志文件最大 10MB,最多保留 3 个(即总日志不超过 ~30MB) -
修改 Docker 全局默认配置(影响后续所有新容器):
编辑/etc/docker/daemon.json,加入:
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
- 重启 Docker:
sudo systemctl restart docker
配合系统日志与磁盘分析(排查根源)
有时日志暴增不是容器本身问题,而是应用异常刷错日志。建议同步检查:
- 看哪个容器日志占空间最多:
du -sh /var/lib/docker/containers/*/*-json.log 2>/dev/null | sort -hr | head -5 - 查看该容器最近日志内容(找高频错误):
docker logs --tail 100 --since "2h" <container-id></container-id> - 确认是否 journald 也在吃空间:
journalctl --disk-usage,必要时清理:sudo journalctl --vacuum-size=500M











