Docker 日志占满磁盘:先确认来源,再配置轮转
作者: OpsMate 团队
更新于
基于 OpsMate 实机排查整理;命令请在你有权限的服务器上执行,路径与服务名按环境替换。
Docker 默认的 json-file 日志驱动不会自动轮转;容器持续往 stdout/stderr 打日志时,宿主机磁盘或 inode 会被写满,应用表现为无法写入、健康检查失败或整站 5xx。先确认是哪一个文件系统满了、是否真是容器日志在涨,再在维护窗口配置轮转——不要先清空日志掩盖原因。
以下适用于 Linux 上的 Docker Engine;Docker Desktop 的引擎数据在虚拟机里,不能直接套用宿主机路径。
1. 先区分空间与 inode 耗尽
df -h
df -i
docker system df
docker info --format '{{.DockerRootDir}}'
docker inspect --format '{{.HostConfig.LogConfig.Type}} {{json .HostConfig.LogConfig.Config}}' YOUR_CONTAINER
把 YOUR_CONTAINER 换成你有权限管理的容器名。df -h 看字节容量,df -i 看可用 inode。docker system df 不能替代对容器日志文件的检查,也不能单凭它排除「日志占满」。
2. 定位日志,而不是先清空
docker inspect --format '{{.LogPath}}' YOUR_CONTAINER
docker logs --since 10m --tail 100 --timestamps YOUR_CONTAINER
若 LogPath 指向本地文件,可在获授权的主机上用 ls -lh 看该文件大小。部分日志驱动没有本地路径。不要直接编辑、删除或截断 Docker 管理的日志文件;先保留故障证据,并检查应用是否在高频重复同一错误。分享前遮盖令牌、连接串和个人信息。
若根因其实是业务数据或 inode,而不是容器日志,先看 磁盘占用突然飙升。
3. 在维护窗口控制后续增长
json-file 默认不轮转。下面是单个 Compose 服务的配置示例,不是紧急清理命令:
services:
app:
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
阈值只是示例,按容器数量、保留期和审计要求调整。检查并备份现有配置;经负责人批准后重建受影响的容器,并安排可能的中断。只改 daemon 默认值不会改变已有容器。变更后核对 LogConfig、服务健康和磁盘增长趋势,保留原配置以便回退。官方说明见下方「参考」。
说明性示例:连接失败引发日志风暴
说明性示例(不是真实客户案例):数据库连接失败每秒记几十行,日志很快涨满盘。只清空间会再次告警。应先确认依赖并修好连接,再设合理保留规则;不要用丢弃全部日志掩盖原因。
让 AI 帮你整理证据
请检查磁盘空间、inode、Docker 日志配置和最近十分钟错误。说明证据是否支持「日志占满磁盘」,列出仍缺少的信息。不要删除文件或重建容器;如需变更,先给出风险、验证与回退步骤供我确认。
在 OpsMate 里可手敲上面的命令,或用自然语言描述现象。AI 以排查为主。未通过安全检查的命令会被拦截且不会执行。低风险修复默认自动执行,每一步都会记录。每次让 AI 帮忙看,终端里最近的输出都会一起发到云端 AI,敏感信息请先去掉。
试用
每月免费 500 次 AI 调用;服务器数量不限。桌面端默认把 SSH 凭证保留在本机。
参考
- Configure logging drivers(Docker Docs) — 默认驱动、daemon 与单容器配置
- JSON File logging driver —
max-size/max-file等轮转选项 - df(1) — 容量与 inode 区分
需要帮助理解排查结果?
OpsMate(itops.sh)把 SSH 终端和 AI 放在同一页,由你核对证据。每次让 AI 帮忙看,终端里最近的输出都会一起发到云端 AI,敏感信息请先去掉。
免费开始 本地凭证桌面端