使用 WSL2 运行 Docker


以下配置适用于 WSL 2,Ubuntu 24.04

安装 Docker for Windows

访问官网,点击 Download Docker Desktop,选择 Windows - AMD64 版本,按照指引进行操作,选择默认设置即可。

也可手动进行安装。具体请参考 Docker 的相关文档配置参数。网址:https://docs.docker.com/desktop/setup/install/windows-install/,查看 Install from the command line 一节。

安装之后可以勾选下图中的所有选项,这样只要启动 docker 桌面,任意 WSL 子系统都能访问全部的 docker 镜像(是不是神奇!)。

访问方式

修改 WSL 子系统存储位置

WSL 的 Docker 数据默认存储在 WSL 的虚拟磁盘文件中,通常位于系统盘上:
C:\Users\<的用户名>\AppData\Local\Docker\wsl\data

要将其迁移到非系统盘,需要进行以下步骤:

确认当前 WSL 数据存储位置

打开 PowerShell,运行以下命令,列出所有 WSL 实例:

wsl -l -v

WSL 子系统列表

其中“*”号前面的是名叫“Ubuntu”的子系统,状态是运行中,WSL 的版本是 WSL 2。“*”代表的是默认 WSL 子系统,也就是命令行键入 wsl 会唤出的系统。

第二个子系统是 Windows 版本的 Docker Desktop 的守护程序,一般不直接使用。

停止 Docker 和 WSL

  1. 停止 Docker Desktop:

    • 在任务栏中右键单击 Docker 图标,选择 Quit Docker Desktop
  2. 停止所有 WSL 实例:

    wsl --shutdown

备份和移动 WSL 实例

  1. 导出 docker-desktop-data
    使用 wsl --export 命令将 Docker 数据导出为一个 .tar 文件:

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

    D:\DockerBackup 是目标路径,可以根据需要更改。

  2. 卸载原来的 WSL 实例
    使用 wsl --unregister 卸载 docker-desktop-data 实例:

    wsl --unregister docker-desktop-data # 这个操作很危险,执行之前一定要确保备份完成,否则数据不可恢复!!!
  3. 导入到新的存储位置
    将导出的 .tar 文件导入到非系统盘的新路径,例如 D:\DockerWSL

    wsl --import docker-desktop-data D:\DockerWSL D:\DockerBackup\docker-desktop-data.tar

    这会将 docker-desktop-data 的存储路径更改为 D:\DockerWSL

配置 Docker 使用新的 WSL 存储位置

  1. 启动 Docker Desktop。
    Docker 会自动检测 docker-desktop-data 的新位置,并加载它。

  2. 验证存储位置:
    打开 PowerShell,运行以下命令:

    wsl -l -v

    确认 docker-desktop-data 的新路径是否生效。

更改 WSL 全局存储路径

如果想从根本上改变 WSL 所有实例的默认存储路径,可以修改 WSL 的全局设置。

  1. 打开文件:
    C:\Users\<用户名>\.wslconfig
    如果文件不存在,可以手动创建。

  2. 添加或修改以下配置:

    [wsl2]
    # 指定新的 WSL 实例存储路径
    swapFile=D:\\WSL\\swap.vhdx
  3. 重启 WSL:

    wsl --shutdown

验证存储迁移是否成功

  1. 启动 Docker Desktop。

  2. 运行以下命令,确认 Docker 的存储路径:

    docker info

    检查 Docker Root Dir,它应该指向 WSL 的新存储路径。

注意事项

  1. 性能问题:
    • 如果新存储路径是机械硬盘(HDD),Docker 的性能可能会下降。推荐使用 SSD。
  2. 路径问题
    WSL 和 Docker 对路径的支持有限,需要确保路径合法。
  3. 数据问题
    在迁移存储路径前,确保对 Docker 容器和镜像进行备份。

修改镜像存储位置

如图,可以在这里选择镜像存储的位置,把镜像放置在非系统盘,可以极大减少系统负担。

镜像存储位置

创建 Docker 镜像

可以在 App 中进行创建,也可以在各个子系统进行创建。

可以参考微软的“WSL 上的 Docker 容器入门”:https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-containers


Author: Yixiang Zhang
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Yixiang Zhang !
评论
  TOC