Docker容器日志管理:查看、清理与配置完整指南

为什么需要管理 Docker 容器日志?
运行中的容器会持续输出日志,如果不加干预,日志文件会越积越大,最终 占满服务器磁盘,导致服务异常。
本文手把手教你 Docker容器日志管理 的完整流程:先学会查看日志,再搞清楚文件存哪,最后配置自动轮转,一劳永逸。
前置准备
- 已安装 Docker 并启动服务(执行
docker --version确认) - 至少有一个运行中的容器(用
docker ps查看) - 有 sudo 权限或 root 用户
第一步:查看容器日志
最常用的命令是 docker logs。
例如查看容器 my-app 的日志:
docker logs my-app常用参数:
--tail 50:只显示最后 50 行-f:实时跟踪输出,类似tail -f--since "2025-01-01T00:00:00":只看某个时间之后的日志-t:显示时间戳
如果容器日志太多,先别急着清空,先确认日志默认保存位置。
第二步:找到日志文件并手动清理
Docker 容器日志默认使用 json-file 驱动,文件存在宿主机上:
/var/lib/docker/containers/<容器完整ID>/<容器完整ID>-json.log获取容器完整 ID 的方法:
docker inspect --format='{{.Id}}' my-app然后查看文件大小:
ls -lh /var/lib/docker/containers/$(docker inspect --format='{{.Id}}' my-app)/*-json.log紧急清理(不减重启容器或服务):
sudo truncate -s 0 /var/lib/docker/containers/$(docker inspect --format='{{.Id}}' my-app)/*-json.log⚠️ 不要直接用rm删除日志文件,否则容器会报错;用truncate清空内容最安全。
第三步:配置自动轮转(一劳永逸)
修改 Docker 守护进程配置 /etc/docker/daemon.json,添加日志选项:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}max-size: 每个日志文件最大 10MBmax-file: 最多保留 3 个历史日志文件
保存后重启 Docker:
sudo systemctl restart docker注意:此配置只对 重启后新建的容器 生效。已有容器需要重建才能生效,或者手动停止后启动(docker stop+docker start,但会丢失容器状态)。最佳实践是重建容器时使用--log-opt临时覆盖:
docker run -d --name my-app --log-opt max-size=10m --log-opt max-file=3 nginx第四步:效果验证
- 运行一个会持续产生日志的容器(例如
docker run -d --name test-log busybox sh -c "while true; do echo hello; sleep 1; done") - 查看日志文件大小:
ls -lh /var/lib/docker/containers/$(docker inspect --format='{{.Id}}' test-log)/*-json.log - 观察
max-size生效:大约到 10MB 时会自动切割,目录下出现第二个日志文件 - 用
docker logs --tail 20 test-log验证日志仍然可读
避坑指南与高频问题
Q: 不小心用 rm 删了日志文件怎么办? 容器日志会异常,无法再用 docker logs。
解决方法:停止容器,删除容器,然后重新创建。
Q: 配置完 daemon.json 后已有容器日志还是无限增长? 因为配置只对新容器生效。
对已有容器可以按步骤二中的 truncate 手动清空,然后重启容器(docker restart <容器>)即可。
Q: 容器日志太多影响 docker logs 命令卡死? 添加 --tail 100 限制行数;
如果文件巨大,直接用 truncate 清空后再用 docker logs。
Q: 如何查看所有容器日志的总占用? 使用 du -sh /var/lib/docker/containers/*/*-json.log。
总结
掌握 Docker容器日志管理 可以避免磁盘告警,核心三步:查看(docker logs)、手动清理(truncate)、自动轮转(daemon.json)。
对于生产环境,务必在部署容器时就配置好日志大小限制。
遇到日志暴涨时,优先用 truncate 临时止血,再调整配置。