因为之前使用的windows11 开发人员预览体验计划版本官方停止更新和维护,导致我系统的一些功能出现问题,忍无可忍还是用U盘重装了一下系统,把系统更新成了Win11 最新的版本。更新之前忘了备份Docker 目录下的容器和镜像了,因为我的Docker Desktop 默认安装在C 盘,好在重装系统的时候微软帮我把旧操作系统的文件都备份到了Windows.old 这个目录下,不然的话就真的找不回来了。
第一步,要先找到重装系统之后,原ext4.vhdx 所在的文件夹。
可以用everything 或其它全局搜索工具进行查找,我的文件被备份在了"C:\Windows.old\Users\${username}\AppData\Local\Docker" 这个目录下,备份目录的实际位置与你重装之前的文件位置有关。
第二步,修改Docker desktop的配置项:Disk image location。
我在重装系统之后,就把wsl 和Docker Desktop都重装了,配置->Resources->Advanced->Disk image location 这个配置项原本的配置应该是在C盘的一个目录下,但我这次想把它放在D盘,因为我D盘空间大一些。
点击Browse 按钮,选择你想要放置的目录,点击确定后,Docker Desktop v4.26.0 版本会在你选择的目录下自动加上DockerDesktopWSL,这个完整的目录才是你最后备份的镜像文件所要拷贝的目录。
修改完成后,重启docker desktop。
第三步,拷贝原镜像磁盘文件。
重启完成后,可以看到新创建的DockerDesktopWSL 目录,关闭Docker Desktop,将新创建的DockerDesktopWSL 重命名一下,因为我们不再用这个文件夹下的内容了。将原ext4.vhdx 所在文件夹的整体文件夹,即包含data 和distro 目录的wsl 目录,全部拷贝到DockerDesktopWSL 所在的同级目录下。
因为原镜像和容器可能比较大,拷贝时间较久,请耐心等待。拷贝完成后,将原wsl 目录重命名为DockerDesktopWSL,启动Docker Desktop。启动完成后,可以看到原来创建的镜像和容器都恢复过来了。
有些不用的容器和镜像删除之后,磁盘空间没有被立刻释放,这里也附上立刻释放windows 磁盘空间的一个方法:
# 关闭wsl
wsl --shutdown
# 管理计算机驱动器
diskpart
# 选择虚拟磁盘文件
select vdisk file="上述步骤data\ext4.vhdx 文件的完整路径"
# 压缩文件
compact vdisk
# 压缩完毕后卸载磁盘
detach vdisk
# 压缩完成后应该会自动卸载磁盘,不手动执行命令应该也可以
上述命令全部执行完成后,重启Docker Desktop 即可!