Docker Desktop试用期结束后,如何在WSL2的Docker CE中复用原有容器与卷?
当然可以复用这些已有的容器!不过容器的运行依赖镜像、卷数据和配置信息,我们需要把这些组件从Docker Desktop迁移到WSL2的Docker CE中,下面是具体步骤:
第一步:定位Docker Desktop的存储内容
Docker Desktop在WSL2环境下的容器、镜像和卷数据默认存储在它专属的WSL发行版docker-desktop-data里:
- 打开PowerShell,输入
wsl -d docker-desktop-data进入该发行版 - 核心数据都在
/var/lib/docker目录下,包含containers(容器配置)、images(镜像)、volumes(卷数据)等子文件夹
即使Docker Desktop已经无法启动,这个方法依然有效——因为WSL发行版的数据还是完整保存着的。
第二步:导出需要的组件
1. 导出镜像
如果还能打开Docker Desktop,直接在PowerShell或CMD里执行:
# 替换为你的镜像名和标签 docker save my-image:latest > my-image.tar
如果Docker Desktop无法启动,进入docker-desktop-data发行版后,也可以用内置的Docker工具执行同样命令,把tar文件保存到Windows共享目录,比如/run/desktop/mnt/host/c/temp/。
2. 导出容器(含运行状态)
如果需要保留容器的当前运行状态,先把容器提交为镜像再导出:
# 替换容器名和新镜像名 docker commit my-existing-container my-container-image:latest # 导出这个镜像 docker save my-container-image:latest > my-container-image.tar
如果只需要容器的文件系统内容,直接用docker export:
docker export my-existing-container > my-container-filesystem.tar
3. 导出卷数据
卷是独立于容器的持久化数据,我们可以用临时容器挂载卷来打包数据:
# 替换my-volume为你的卷名,/run/desktop/mnt/host/c/temp/对应Windows的C:\temp目录 docker run --rm -v my-volume:/data -v /run/desktop/mnt/host/c/temp/:/backup busybox tar cvf /backup/my-volume.tar /data
第三步:在WSL2的Docker CE中导入组件
先把导出的tar文件复制到WSL2的本地目录(比如~/docker-backups/),方便后续操作:
cp /mnt/c/temp/*.tar ~/docker-backups/
1. 导入镜像
cd ~/docker-backups/ # 导入镜像文件 docker load < my-image.tar # 提交的容器镜像也用这个命令导入 docker load < my-container-image.tar
2. 恢复容器
如果是用docker commit导出的镜像,直接用该镜像创建新容器(可以加上原容器的端口映射、卷挂载等参数):
docker run -d --name my-restored-container my-container-image:latest
如果是用docker export导出的文件系统,先导入为镜像再创建容器:
docker import my-container-filesystem.tar my-restored-image:latest docker run -d --name my-restored-container my-restored-image:latest
3. 导入卷数据
先创建新卷,再用临时容器解压数据进去:
# 创建新卷 docker volume create my-restored-volume # 解压tar文件到新卷,--strip-components=1用来去掉tar里的/data前缀 docker run --rm -v my-restored-volume:/data -v ~/docker-backups/:/backup busybox tar xvf /backup/my-volume.tar -C /data --strip-components=1
备选方案:直接迁移整个Docker数据目录
如果需要迁移所有内容,也可以直接复制/var/lib/docker目录,但要注意先停止两边的Docker服务:
- 退出Docker Desktop(任务栏右键图标选择退出)
- 在WSL2的目标发行版中停止Docker服务:
sudo systemctl stop docker - 进入
docker-desktop-data发行版打包数据:wsl -d docker-desktop-data tar cvf /tmp/docker-full-data.tar /var/lib/docker exit - 在WSL2目标发行版中解压并替换数据:
cd /tmp tar xvf /mnt/wsl/docker-desktop-data/tmp/docker-full-data.tar sudo cp -r var/lib/docker/* /var/lib/docker/ sudo chown -R root:root /var/lib/docker/ - 重启Docker服务:
sudo systemctl start docker
注意:尽量保证WSL2的Docker CE版本和之前Docker Desktop的版本接近,避免出现兼容性问题。
内容的提问来源于stack exchange,提问作者Alessio Amato




