You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Docker buildx后如何回收CentOS 7上的磁盘空间?

问题解决指南:Docker Buildx多平台构建后VFS存储驱动下的冗余空间回收及差异分析

一、安全删除vfs/dir下的冗余Buildx文件

  • 彻底清理Buildx builder实例
    先执行docker buildx ls排查残留的builder节点,若存在则用docker buildx rm <builder-name>删除,再运行docker buildx prune -af强制清理所有构建缓存。
  • 手动清理前的验证与操作
    1. 停止Docker服务避免写入冲突:systemctl stop docker
    2. 进入你的Docker data-root目录/docker,查看vfs/dir下的文件夹,这些是VFS存储的镜像层。由于docker images无法识别,说明它们是Buildx构建时生成的、未被Docker主守护进程追踪的临时层。
    3. 可通过/docker/buildx目录下的缓存记录,确认哪些文件夹属于Buildx冗余层;对于无关联的文件夹,直接删除:rm -rf /docker/vfs/dir/<folder-id>
    4. 重启Docker服务:systemctl start docker
  • 后续预防策略
    构建时指定独立缓存目录,避免污染VFS存储:
    docker buildx build --platform linux/amd64,linux/arm64 \
      --cache-to type=local,dest=/tmp/buildx-cache \
      --cache-from type=local,src=/tmp/buildx-cache \
      -t <image-name> .
    

二、关联vfs/dir子文件夹与对应镜像

VFS存储驱动的每个文件夹名对应镜像层的ID,关联方法如下:

  • 查看层元数据:进入目标文件夹,执行cat /docker/image/vfs/layerdb/sha256/<layer-id>/diff-id获取diff-id,然后在/docker/image/vfs/imagedb/content/sha256/目录下查找包含该diff-id的镜像元数据文件,即可匹配到对应的镜像ID。
  • 批量比对:执行docker inspect $(docker images -q)查询所有镜像的层信息,将输出中的层ID与vfs/dir下的文件夹名逐一比对,找到关联的镜像。

三、VFS与Overlay2在Buildx构建后的空间差异原因

  1. 存储驱动特性差异
    • Overlay2是分层存储驱动,支持写时复制(CoW),Buildx构建的临时层可通过共享基础层减少冗余,且Docker垃圾回收机制能有效追踪并清理未被引用的层。
    • VFS是无共享机制的基础驱动,每个层都是完整的目录拷贝,Buildx构建多平台镜像时会生成大量独立临时层;若这些层脱离Docker主守护进程的追踪(Buildx使用独立builder实例),常规prune命令无法识别清理。
  2. Docker版本与配置差异
    • Docker 24.0.4与VFS存储驱动的兼容性存在问题,导致Buildx临时层未被正确标记为可回收;而Docker 23.0.6与Overlay2的适配性更好,垃圾回收能正常工作。
    • 你配置了data-root为/docker,Buildx缓存路径与默认路径不同,Docker垃圾回收未覆盖该路径下的VFS临时层;另一台默认配置的机器,Overlay2缓存路径在/var/lib/docker下,垃圾回收可正常扫描。

内容的提问来源于stack exchange,提问作者Pino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:35:12