Docker 磁盘占满怎么查
宿主磁盘被 Docker 吃满,来源基本上是四类:镜像层堆积、容器日志、数据卷膨胀、构建缓存。正确做法是先定位再清理:用 docker system df 分类看占用,再用 du 下钻到具体目录,确认大头之后再选择对应的清理手段。上来就执行全量清理命令,既可能清不到真正的大头,也可能误删业务数据。
基本信息
| 定位工具 | docker system df -v 按镜像、容器、卷、缓存分类看占用 |
|---|---|
| 日志大头 | /var/lib/docker/containers 下的 json 日志未设上限会无限增长 |
| 镜像清理 | image prune 清悬空,加 -a 清所有未被引用的镜像 |
| 卷清理 | volume ls 过滤未被使用的卷,确认用途后再删 |
| 根治方向 | 设置日志上限、把数据卷挂到大容量盘、建立定期清理机制 |
典型使用场景
- 磁盘告警:宿主使用率快速上涨,需要先定位是镜像还是日志
- 拉取失败:镜像拉取报空间不足,需要临时腾出容量
- 日志暴涨:某个服务大量打印日志把分区写满,影响所有容器
- 发布受阻:构建缓存占满空间导致构建失败
- 容量规划:把数据卷迁到独立大盘,避免与系统盘争空间
排查命令
排查命令
docker system df -v | head -30 # 分类查看占用与可回收量
du -sh /var/lib/docker/* | sort -h | tail # 下钻到具体子目录
# 定位增长最快的容器日志
du -sh /var/lib/docker/containers/*/*-json.log | sort -h | tail
# 查看宿主分区真实剩余空间
df -h /var/lib/docker
# 清理顺序建议:日志与构建缓存 → 悬空镜像 → 未被引用的镜像 → 卷(最后)四类来源与处置
| 来源 | 典型表现 | 处置方式 |
|---|---|---|
| 镜像层 | 镜像数量多、大量悬空层 | image prune,清理未使用镜像 |
| 容器日志 | 单个 json 日志文件异常巨大 | 调小上限并轮转,重启对应容器 |
| 数据卷 | 卷数量多、单个卷持续增长 | 确认用途后再删,勿盲清 |
| 构建缓存 | CI 机器上增长最快 | builder prune 定期清理 |
清理顺序很重要:先日志与构建缓存,再悬空镜像,最后才考虑数据卷。卷一旦删除,业务数据无法恢复。
只清理不治日志上限,过几天还会满。给日志驱动设置单文件大小与文件数上限,把数据卷挂到容量充足的数据盘,才是根治做法。