Skip to content

容器磁盘占用 ​

容器列表中的 磁盘 列显示每个容器占用了多少磁盘空间,运行中和已停止的容器都会显示。它把 Docker 能测量的两部分加在一起:容器向自身文件系统写入的数据,以及它挂载的 Docker 卷。把鼠标悬停在数值上可以看到每一部分。

大小以二进制单位显示,所以 Docker 的 20.5kB 在这里显示为 20 KB。

统计范围 ​

  • 可写层:容器在挂载点之外创建或修改的所有文件,例如临时文件、缓存或启动后安装的软件包。它是 docker ps -s 中 SIZE 列的第一个值。
  • 卷,包括容器挂载的命名卷和匿名卷。这些就是 docker system df -v 列出的大小。被多个容器使用的卷会计入每个容器,提示中会注明它是共享的。

以下内容不计入:

  • 绑定挂载,例如 ./data:/var/lib/postgresql/data
  • 镜像,即容器运行所用的镜像,由该镜像的所有容器共享
  • Docker 自己为该容器保存的日志文件
  • 没有任何容器使用的卷,因为没有可以显示它们的行。它们会计入主机的 可回收空间。

绑定挂载 ​

Docker 对绑定挂载的主机目录里有什么一无所知,要测量这样的目录就得遍历其中的每个文件,而 Dozzle 不会这样做。把数据放在绑定挂载里的数据库,即使存有很多 GB 数据,在这里也只显示几 KB。要测量这样的目录,请在主机上运行:

sh
du -sh /data/postgres

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

可回收空间 ​

主机卡片会在磁盘指示旁显示 可回收:没有任何容器使用的内容所占的空间,与 docker system df 中 RECLAIMABLE 列的总数相同。把鼠标悬停在上面,可以看到未使用的镜像、未使用的卷、已停止的容器和构建缓存各占多少。它和卷一起刷新,所以最多每 20 分钟刷新一次。

清理 ​

启用 操作 后,同一个弹出框可以删除它列出的内容。勾选要删除的类型,然后点击 清理。Dozzle 会先列出将被删除的内容并在删除前确认,删除后立即重新测量主机,让数字马上更新。

每种类型执行对应的 prune 命令:

  • 未使用的镜像:docker image prune -a。已停止的 stack 下次启动时会重新拉取镜像。
  • 未使用的卷:docker volume prune -a,命名卷也会被删除。它们默认不勾选,并且需要再次确认,因为当前没有容器使用的卷,仍可能存放着某个只是为了重新部署而被移除的容器的数据库。
  • 已停止的容器:docker container prune
  • 构建缓存:docker builder prune -a

比它所连接的 Dozzle 更旧的 agent 无法清理,弹出框会说明这一点。

定时清理 ​

在同一弹出框底部的 自动清理 中,选择每天或每周(周日)以及一个时间,时间使用服务器的时区。默认关闭。到点后,Dozzle 会依次清理每台已连接的主机:未使用的镜像、已停止的容器和构建缓存。定时清理永远不会删除卷。弹出框会显示上次运行释放了多少空间。

该计划与 自动更新 设置一起保存在 dozzle.yml 中,无需重启即可生效。它只在服务器模式下运行,并会先等待正在进行的容器更新完成。设置 DOZZLE_AUTO_CLEANUP 或 DOZZLE_AUTO_CLEANUP_TIME 会固定该计划,弹出框此时只显示它。

何时更新 ​

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

可写层的测量时机:

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

卷在第一次测量之后立即测量,之后最多每 20 分钟测量一次。Docker 只能一次性测量所有卷,所以每次刷新都会遍历主机上的每个卷。在两次刷新之间创建的容器会在下一次刷新时显示它的卷。

第一次测量之后的所有测量只在有人打开 Dozzle 时进行。容器在首次测量之前显示 –。

限制 ​

  • Kubernetes 既没有可写层也没有 Docker 卷可供报告,所以在 k8s 模式 下该列会隐藏。
  • 插件驱动的卷通常无法报告大小,因此不会计入。
  • 代理 会测量自己的容器。比它所上报的 Dozzle 更旧的代理不会发送大小,它的容器会显示 –。

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