Windows 上修改 docker 的镜像文件存储位置(修改 WSL 文件映射)

1、起因

一开始在 Windows 上安装了 docker 后,它默认是把镜像拉取保存到 C:Users<你当前用户>AppDataLocalDockerwsldata 路径的 ext4.vhdx 文件下,当拉取的镜像越来越大时,C 盘比较小的同学就 hold 不住了,怎么在 Windows 上修改 docker 的镜像文件存储位置也就变的迫在眉睫。

2、修改

点击安装 Docker Desktop 后启动,会提示安装 WSL,如果不安装,启动不了 docker engine 服务。

因为目前的 docker 依附 WSL 来进行文件映射,所以我们需要通过 wsl 来修改 docker 的文件映射(可理解为文件挂载)路径就行了。

现在我们安装的都是WSL2,WSL2 模式下 docker-desktop-data 磁盘映像通常位于以下位置: C:Users<你当前用户名>AppDataLocalDockerwsldataext4.vhdx

按照以下步骤将其重新定位到其他驱动器 or 目录,并保留所有现有的 Docker 数据。

2.1 关闭 Docker Desktop

首先,在任务栏右下角右键单击 Docker Desktop 图标关闭 Docker 桌面,选择退出 Docker 桌面,等一会 Docker 图标没了之后,就证明 Docker 完全关闭了,然后,打开命令提示符:

wsl --list -v

我们就能能够看到,确保两个状态都已停止。

在这里插入图片描述

默认情况下,Docker Desktop for Window 会创建如下两个发行版(distro)
C:Users<你当前用户名>AppDataLocalDockerwsl
docker-desktop (对应distro/ext4.vhdx)
docker-desktop-data (对应data/ext4.vhdx)
官方说明提示:vhdx文件最大支持256G,超出大小会有异常。

2.2 备份镜像

将 docker-desktop-data 导出到文件中(备份 image 及相关文件),我是把他保存到 D 盘下,用的如下命令,你们可以根据自己需要修改路径:

wsl --export docker-desktop-data "D:\docker-desktop-data.tar"

2.3 WSL 取消注册 docker-desktop-data

从 wsl 取消注册 docker-desktop-data,需注意 C:Users<你当前用户名>AppDataLocalDockerwsldataext4.vhdx 文件将被自动删除,命令如下:

wsl --unregister docker-desktop-data

2.4 镜像数据导回 WSL 并挂载到新路径

将导出的 docker-desktop-data 再导入回 wsl,并设置我们想要的路径,即新的镜像及各种 docker 使用的文件的挂载目录,我这里设置到 D:dockerwsl,命令如下:

wsl --import docker-desktop-data "D:\docker\wsl" "D:\docker-desktop-data.tar" --version 2

命令执行完毕,就能再目录下看到文件了,这时次启动 Docker Desktop,可以正常工作了。

3、验证

修改前记录 C:Users<你当前用户名>AppDataLocalDockerwsl 目录文件大小,修改后再看一下该路径文件大小,可以看到变化(前提是还未修改前有拉取镜像,且镜像比较大),然后 docker pull 任意一个镜像(我下载了Ubuntu),再看 C:Users<你当前用户名>AppDataLocalDockerwsl 目录无变化,而 D:\docker\wsl (你修改的镜像挂载目录)增大。

最后,如果在验证后一切没有问题,则可以删除 D:docker-desktop-data.tar (前面备份的镜像文件),记住可不是 ext4.vhdx 文件,这可是重要文件,删除了 Docker Desktop 就打不开了。

4、附录

Windows 的 docker 删除容器后 WSL2 磁盘空间不释放的问题 可参考:Windows 的 docker 删除容器后 WSL2 磁盘空间不释放的问题