Skip to content

容器磁盘占用 ​

容器列表中的 磁盘 列显示每个容器向自身文件系统写入了多少数据,运行中和已停止的容器都会显示。它与 docker ps -s 中 SIZE 列的第一个值相同,只是以二进制单位显示,所以 Docker 的 20.5kB 在这里显示为 20 KB。

统计范围 ​

Docker 把它称为容器的可写层:容器在挂载点之外创建或修改的所有文件。容器在自身文件系统里写入临时文件、缓存或日志时,这个值会增长;启动后运行 apt install 的容器也一样。

以下内容不计入:

  • 卷,包括命名卷和匿名卷
  • 绑定挂载,例如 ./data:/var/lib/postgresql/data
  • 镜像,即容器运行所用的镜像,由该镜像的所有容器共享
  • Docker 自己为该容器保存的日志文件

大多数数据库和日志存储都把数据放在卷或绑定挂载里,所以一个存有 30 GB 数据的 Postgres 在这里可能只显示几 KB。这是正确的:那 30 GB 在挂载里,不在容器里。

查找其余占用 ​

Docker 可以测量卷,但对绑定挂载的主机目录里有什么一无所知。要测量这样的目录,就得遍历其中的每个文件,而 Dozzle 不会这样做。要查看其余空间用在了哪里,请在主机上运行:

sh
# 卷,以及使用每个卷的容器数量
docker system df -v

# 一个绑定挂载的目录
du -sh /data/postgres

要监控这些目录所在的磁盘,请按照 主机指标 中的说明,把它挂载到主机卡片上。

何时更新 ​

Docker 不会在任何地方保存这个值。每次被询问时,它都会遍历可写层来计算,所以 Dozzle 很少询问:

  • Dozzle 启动后不久,对每个容器测量一次
  • 容器停止时再测量一次,因为此后它的可写层不会再变化
  • 对于运行中的容器,在它写入约 100 MB 之后测量,或者只要它写入过任何数据,每 5 分钟测量一次

对运行中容器的检查只在有人打开 Dozzle 时进行。容器在首次测量之前显示 –。

限制 ​

  • Kubernetes 没有可写层可供报告,所以在 k8s 模式 下该列会隐藏。
  • 代理 会测量自己的容器。比它所上报的 Dozzle 更旧的代理不会发送大小,它的容器会显示 –。

基于 MIT 许可证发布。开源项目,由 Docker OSS 赞助。