You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker Desktop试用期结束后,如何在WSL2的Docker CE中复用原有容器与卷?

如何将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服务:

  1. 退出Docker Desktop(任务栏右键图标选择退出)
  2. 在WSL2的目标发行版中停止Docker服务:
    sudo systemctl stop docker
    
  3. 进入docker-desktop-data发行版打包数据:
    wsl -d docker-desktop-data
    tar cvf /tmp/docker-full-data.tar /var/lib/docker
    exit
    
  4. 在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/
    
  5. 重启Docker服务:
    sudo systemctl start docker
    

注意:尽量保证WSL2的Docker CE版本和之前Docker Desktop的版本接近,避免出现兼容性问题。

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

火山引擎 最新活动