Docker 日志把磁盘写满怎么办?json-file 限制和清理方案
Docker 日志把磁盘写满怎么办?json-file 限制和清理方案
分类:运维知识
磁盘突然 100%,一查发现不是数据库,也不是上传文件,而是某个容器的 json 日志写了几十 G。这种问题很常见,而且会拖垮整台机器。本文给出临时止血、长期限制和排查顺序。
摘要:适合 Docker 服务多、日志增长快的服务器,读完能设置日志大小上限。
适合场景和不适合场景
适合:
- 一台机器跑多个 Compose 项目
- 容器日志经常刷屏
- 需要避免磁盘被单个服务写满
不适合:
- 需要集中日志审计的平台
- 日志必须长期完整保留的合规场景
- 已经使用 Loki/ELK 的成熟环境
这一步要先讲清楚,是因为很多服务器教程只告诉你“怎么装”,却不告诉你“该不该装”。如果场景不匹配,后面配置写得再漂亮,也只是把问题推迟到上线之后。
配置和成本怎么取舍
日志治理不吃配置,1 核 2G 都能做。关键是提前限制,而不是等磁盘满了再删。系统盘小于 40G 的服务器尤其要设置 Docker log opts。
我会把 Docker 日志治理 放在雨云服务器 rainyun-com的 云服务器上,处理多容器日志轮转几乎没有额外压力。注册填优惠码2026off领 5折,这类配置更适合先稳定跑起来,再按真实负载升级。
准备工作
- 准备一台干净的 Ubuntu 22.04 或 Debian 12 服务器,先确认 SSH、时间同步和防火墙状态。
- 规划目录:
/opt/docker-logs-fill-disk-20260601。配置、数据、备份脚本都放在同一主题目录下,后面迁移更省事。 - 根据主题放行端口:
local。游戏和网络服务尤其要分清 TCP/UDP。 - 先用测试数据跑通,再导入正式数据或邀请其他人使用。
核心配置
下面配置用于说明关键项,发布前要按当前官方文档确认镜像版本、环境变量和端口。
{"log-driver":"json-file","log-opts":{"max-size":"50m","max-file":"3"}}怎么确认真的可用
执行docker inspect 容器名 --format {{.LogPath}}找日志文件,再用du -h看大小。设置后新日志应按 max-size 轮转。
验证时不要只看进程是否存在,至少完成一次真实动作:游戏服要让外部玩家连接,应用要登录并写入一条数据,运维项要确认状态变化真的生效。这样能提前发现端口、权限、反代和路径问题。
踩坑清单
不要直接删除正在被 Docker 占用的 json 日志文件后就以为完事。更稳妥是 truncate 清空,随后设置 daemon.json 并重启 Docker。
排查建议按这个顺序来:
- 看日志里第一条明确错误,不要只看最后一屏。
- 查端口监听和云安全组,确认协议没有写错。
- 检查数据目录权限,尤其是容器用户和宿主机目录映射。
- 回滚到上一个能工作的配置,再逐项恢复新改动。
备份、升级和迁移
日志通常不需要全量备份,但关键业务日志应发送到独立日志系统,不要只留在容器本机。
维护时建议保留一份“最小恢复说明”:需要哪些文件、恢复命令是什么、域名和端口在哪里改。等真正出问题时,人通常没那么冷静,清单比记忆可靠。
总结
Docker 日志治理是低成本高收益的运维动作,越早做越不容易遇到磁盘满的深夜事故。
