Tag: docker desktop volume migrate

  • WSL Docker 迁移 Volume 到 Linux

    看了一堆 Volume 迁移的教程,麻烦死。其实操作逻辑很简单,找到源主机的 docker volume 目录(一般在 /var/docker/volumes/ ),在目标端建立同名的volume,停掉两端的docker,从源把目录 rsync 到目标。

    Windows 11 + WSL2 + Docker。

    操作步骤如下

    1 找到 Docker 的数据盘 VHDX。

    我自己的磁盘被迁移到了 D盘,如果不知道在哪儿,一般在用户目录,例如 C:\Users\sskaje\AppData\Local\Docker,这个目录下 distro 是程序的镜像,data是数据的镜像。

    如果还不在这里,Windows 11 可以使用任务管理器 -> 性能 右上角… -> 资源监视器 -> CPU,在关联的句柄里搜索 vhdx,然后操作docker,例如 系统托盘退出docker 再打开,或者打开docker-desktop 的界面,乱点点。

    2 退出 Docker Desktop。

    3 在 WSL 里 手动加载 Docker Desktop 的数据盘。

    wsl.exe -d Debian --mount --vhd D:/WSL/Docker/data/ext4.vhdx --bare --name docker-data-1

    参考 https://www.sskaje.me/2023/08/13/wsl-mount-external-vhdx-disk/,找到 docker 数据盘可能的磁盘,我这里是 sdd,直接挂载。

    mkdir docker-data
    mount /dev/sdd docker-data/

    于是,在 docker-data/data/docker/volumes 里能找到正常 docker volumes 目录里的所有文件。

    cd docker-data/data/docker/volumes

    4 (新terminal窗口)在目标主机上建立对应的volumes,然后关掉 docker。

    以 gogs-data 为例,在目标主机上执行

    docker volume create gogs-data
    /etc/init.d/docker stop

    5 从源 WSL 里,rsync 目录

    rsync -av gogs-data root@192.168.11.11:/var/lib/docker/volumes/

    执行完成后,在目标主机上启动 docker

    /etc/init.d/docker start

    如果有多个volume要迁移,迁移完所有的volume之后再start。

    6 目标 Linux 启动对应的docker。

    例如我的 gogs

    docker run --detach --name=gogs -p 10022:22 -p 10880:3000 -v gogs-data:/data gogs/gogs

    再用浏览器访问 192.168.11.11:10880,用之前的凭据登录,一切正常。

    7 收拾残局。

    很遗憾,WSL 2 我不知道怎么正确地 unmount Disk ,我尝试 linux 里 umount 再从外边 wsl --unmount DISK,失败,只能用 wsl --unmount 卸载全部。