Docker 容器磁盘占用排查:镜像、容器层和日志分别占了多少(实战清单)
发表于 : 周二 10月 06, 2026 2:00 am
服务器磁盘告警,Docker 经常是主要占用方。但 给的数字往往对不上 看到的结果,这里把排查顺序理一遍。
第一步:先看 Docker 自己怎么算
输出分成三块:Images、Containers、Local Volumes,还有 Build Cache。先看哪一块最大。
第二步:区分三类占用
日志这一项 常常不计入,但实际能吃掉几十 GB。
第三步:定位具体位置
找出大文件后,再用 把容器 ID 对上具体服务。
第四步:日志要截断不要直接删
容器日志文件被进程攥着,直接 rm 空间不会立即释放。正确做法是截断:
根治办法是在守护进程配置里限制日志大小,编辑:
改完要重启 Docker 守护进程才对新建容器生效,已有容器需要重建。
第五步:清理与注意事项
提醒两点:一是 会删掉所有未运行容器的镜像,重拉要花时间和流量;二是清理前先确认没有依赖某个「停止状态」容器里的数据。
小结
顺序是:总量看,大头用 定位,日志用 处理,最后才谈清理。先量后清,避免误删。
代码: 全选
docker system df代码: 全选
du第一步:先看 Docker 自己怎么算
代码: 全选
docker system df -v输出分成三块:Images、Containers、Local Volumes,还有 Build Cache。先看哪一块最大。
第二步:区分三类占用
代码: 全选
镜像层:多个镜像共享基础层,删一个镜像不一定真正释放空间
容器可写层:容器运行期间写入的数据,删容器才释放
日志文件:/var/lib/docker/containers/*/*-json.log,最容易失控的一块日志这一项
代码: 全选
docker system df第三步:定位具体位置
代码: 全选
du -sh /var/lib/docker/* 2>/dev/null | sort -h | tail -10
du -sh /var/lib/docker/containers/*/*-json.log | sort -h | tail -10找出大文件后,再用
代码: 全选
docker ps -a --no-trunc第四步:日志要截断不要直接删
容器日志文件被进程攥着,直接 rm 空间不会立即释放。正确做法是截断:
代码: 全选
truncate -s 0 /var/lib/docker/containers//-json.log 根治办法是在守护进程配置里限制日志大小,编辑
代码: 全选
/etc/docker/daemon.json代码: 全选
{
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "3"
}
}改完要重启 Docker 守护进程才对新建容器生效,已有容器需要重建。
第五步:清理与注意事项
代码: 全选
# 清理悬空镜像(无标签的中间层)
docker image prune
# 清理停止的容器、未使用的网络、构建缓存
docker system prune
# 连未使用的镜像一起清(谨慎,会删掉没在跑的镜像)
docker system prune -a提醒两点:一是
代码: 全选
-a小结
顺序是:总量看
代码: 全选
docker system df -v代码: 全选
du代码: 全选
truncate