Skip to content

迁盘

清理

  • 前提情况:可以看到,DockerDesktop中默认资源的存放路径是C盘,即使在DockerDesktop中删除了镜像,C盘的空间也不会被释放

    image-20260616190113674

  • 正确做法:

    1. 删除无用的镜像、容器、卷等
    2. 再通过系统工具压缩虚拟磁盘
  • 步骤

    1. 点亮需要保留的容器(未点亮的容器会在后续操作会将其删除),以我自身为例,我只想保留MySQL和Redis,Oracle不想要了,所按图中点亮

      image-20260616190510908

    2. 在终端执行清理命令

      bash
      docker system prune -a --volumes

      image-20260616190920783

      清理完成后,在镜像和容器列表内就只剩下了刚才点亮的容器和运行该容器的镜像了

      image-20260616191031093

      image-20260616191043932

    3. 将此位置的内容复制下来,如我的位置是:C:\Users\33622\AppData\Local\Docker\wsl

      image-20260616191701475

    4. 退出DockerDesktop

    5. 管理员身份运行cmd,按照下面步骤依次执行代码

      bash
      # 1.彻底关闭 WSL 子系统
      wsl.exe --shutdown
      
      # 2.进入 Windows 磁盘管理命令行工具
      diskpart
      
      # 3.选择要操作的虚拟磁盘文件(.vhdx)
      # 下面的file的路径就是 第3步让你复制的路径内容 拼接上 \disk\docker_data.vhdx,不放心的可以打开路径看看是否有这个文件
      select vdisk file="C:\Users\33622\AppData\Local\Docker\wsl\disk\docker_data.vhdx"
      
      # 4.以只读方式附加(挂载)该虚拟磁盘
      attach vdisk readonly
      
      # 5.压缩虚拟磁盘文件(回收未使用的空间)
      compact vdisk
      
      # 6.分离(卸载)虚拟磁盘
      detach vdisk
      
      # 7.退出
      exit

      image-20260616192252558

      image-20260616192420501

      命令解释

      • 彻底关闭 WSL 子系统
        • 目的:停止所有正在运行的 WSL 发行版(包括 Docker Desktop 的后台容器)
        • 原因:Docker 使用的 WSL 虚拟磁盘文件(.vhdx)在挂载状态下被占用,无法进行压缩操作。执行 shutdown 会强制终止所有 WSL 进程并卸载磁盘。
      • 进入 Windows 磁盘管理命令行工具
        • 目的:启动 diskpart 交互式环境,该工具可管理磁盘、分区和虚拟磁盘文件。
        • 注意:后续所有 diskpart 命令均在该交互式提示符下执行。
      • 选择要操作的虚拟磁盘文件(.vhdx)
        • 目的:指定 Docker 用于 WSL 存储数据的虚拟磁盘文件路径。
      • 以只读方式附加(挂载)该虚拟磁盘
        • 目的:将 .vhdx 文件挂载为系统可识别的虚拟磁盘,但仅允许读取操作。
        • 原因:以只读模式附加可防止在压缩过程中意外修改磁盘内容,同时确保磁盘结构稳定,便于 diskpart 进行压缩分析。
      • 压缩虚拟磁盘文件(回收未使用的空间)
        • 目的:扫描虚拟磁盘内部已删除或未使用的数据块,并将它们从 .vhdx 文件中释放,从而减小物理文件占用的硬盘空间。
        • 原理:WSL 的 .vhdx 是动态扩展磁盘,随着容器使用会膨胀,但删除文件后磁盘空间不会自动归还给宿主机。
        • 注意:该过程可能需要较长时间,请耐心等待。
      • 分离(卸载)虚拟磁盘
        • 目的:解除对 .vhdx 文件的挂载,释放系统资源,并使文件恢复到可被正常访问的状态。
        • 说明:压缩完成后必须 detach,否则下次 WSL 启动时可能因磁盘被占用而无法正常挂载。
    6. 清理后的C盘空间明显变大

      image-20260616192659935

MIT版权,未经许可禁止任何形式的转载