Docker 容器磁盘占用排查:镜像、容器层和日志分别占了多少(实战清单)

Docker 部署、编排、镜像管理
回复
admin
Site Admin
帖子: 357
注册时间: 周日 6月 14, 2026 3:48 am
联系:

Docker 容器磁盘占用排查:镜像、容器层和日志分别占了多少(实战清单)

帖子 由 admin »

服务器磁盘告警,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
常常不计入,但实际能吃掉几十 GB。

第三步:定位具体位置

代码: 全选

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
把容器 ID 对上具体服务。

第四步:日志要截断不要直接删

容器日志文件被进程攥着,直接 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
处理,最后才谈清理。先量后清,避免误删。
admin
Site Admin
帖子: 357
注册时间: 周日 6月 14, 2026 3:48 am
联系:

Re: 回复

帖子 由 admin »

支持楼主的分享!实践出真知,动手做一遍比看十遍管用。
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 1 访客