在 Windows 10 Home 上使用 WSL2 上的 Docker Desktop 时,如何更改 docker 映像的位置?

Posted

技术标签:

【中文标题】在 Windows 10 Home 上使用 WSL2 上的 Docker Desktop 时,如何更改 docker 映像的位置?【英文标题】:How can I change the location of docker images when using Docker Desktop on WSL2 with Windows 10 Home? 【发布时间】:2020-10-07 23:57:54 【问题描述】:

我刚刚升级到 Windows 10 Home May 2020,activated WSL2,并安装了Docker Desktop。

WSL2 必须安装在我的系统盘中,这是一个小型 SSD。我不想用 docker 图像填充它。如何更改 docker 图像路径?我想在我的大型 Windows 文件系统中使用路径。

image location 有点令人困惑。我相信它在/mnt/wsl/docker-desktop-data/

如何更改 WSL2 中 docker 镜像的目录?我可以更改 docker 配置以选择 /mnt/d 内的路径,或者将 /mnt/d 中的路径挂载到 docker 数据目录上吗?

【问题讨论】:

【参考方案1】:

我从 github 上的 pxlrbt 找到了this tool。它使用标准的 wsl 导入/导出,非常安全。刚刚将我的 docker-desktop-data 发行版都移到了不同​​的驱动器上,它运行良好。

【讨论】:

使用上述脚本移动后,出现错误Docker desktop WSL distro stopped。介意分享步骤吗?【参考方案2】:

编辑:重新注册 docker-desktop 现在会将默认 docker-data 设置为 C 盘,因此我们应该只取消注册 docker-data 作为接受的答案。

你可以的

 wsl --unregister docker-desktop-data

 wsl --import docker-desktop-data D:\wsl\docker-desktop-data "C:\Program Files\Docker\Docker\resources\wsl\wsl-data.tar" --version=2

tar 文件是用于安装的文件,在它之前是您的新目标。

这总是有效的,而 move-wsllxrunoffline 在快速环上对我不起作用。有时你必须先卸载/安装 docker

【讨论】:

【参考方案3】:

WSL 2 docker-desktop-data vm 磁盘映像通常位于: %USERPROFILE%\AppData\Local\Docker\wsl\data\ext4.vhdx

按照以下步骤将其重新定位到其他驱动器/目录,并保留所有现有 docker 数据(针对 Docker Desktop 2.3.0.4 (46911) 进行测试,并在更新 3.1.0 (51484) 后继续工作):

首先,通过右键单击 Docker 桌面图标并选择退出 Docker 桌面来关闭 Docker 桌面

然后,打开命令提示符:

wsl --list -v

您应该可以看到,确保两者的状态都已停止。(wsl --shutdown)

  NAME                   STATE           VERSION
* docker-desktop         Stopped         2
  docker-desktop-data    Stopped         2

将 docker-desktop-data 导出到文件中

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

从 wsl 注销 docker-desktop-data,请注意,在此之后,您的 ext4.vhdx 文件将被自动删除(如果您有重要的现有图像/容器,请先备份它):

wsl --unregister docker-desktop-data

将 docker-desktop-data 导入回 wsl,但现在 ext4.vhdx 将驻留在不同的驱动器/目录中:

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

再次启动 Docker 桌面,它应该可以工作了

如果验证后一切正常,您可以删除 D:\Docker\wsl\data\docker-desktop-data.tar 文件(不是 ext4.vhdx 文件)

【讨论】:

完美!我想使用我的 HDD 而不是 SSD 来存储 docker 图像。这就是我要找的。​​span> 清晰简洁 完美。我可以添加到该线程的唯一附加组件是我刚刚清除了缓存,并且列表中没有此 docker-desktop-data,因此我必须再次启动 Docker 并退出它才能再次创建 docker-desktop-data WSL 发行版。 请注意,您还需要在导出之前关闭 wsl(没有它我得到了 TimeoutException):wsl --shutdown 我的磁盘空间低了这么久...非常感谢!【参考方案4】:

在 Windows 10 home 中,docker desktop 在 ""C:\Users\xxx\AppData\Local\Docker" 目录下创建 VM,并且此 VM 包含下载的 docker 映像。如果要更改 VM 位置从 C: 到不同的目录,您可以通过使用如下命令在 Windows(安装 docker 桌面之前)上创建一个联结来做到这一点:

mklink /j "C:\Users\xxx\AppData\Local\Docker" "D:\Users\xxx\AppData\Local\Docker"

请注意,在执行命令之前,目标目录结构应该存在,而如果 C:\Users\xxx\AppData\Local\Docker 目录已经存在,则应该删除它,否则命令可能会失败。现在在 Windows 10 主页上安装 docker 桌面,瞧,您可以在“D:\Users\xxx\AppData\Local\Docker”目录中看到内容,即 docker VM 硬盘映像文件,该文件将包含所有下载的 docker 映像。

【讨论】:

【参考方案5】:
    停止 Docker 桌面 将 Docker 文件夹从 C:\Users\xxx\AppData\Local\Docker 重新定位到新路径 确保C:\Users\xxx\AppData\Local\Docker 不再存在 以管理员模式打开 cmd 运行以下命令,将在 cmd 窗口中使用适当的 from 和 to 路径创建符号链接
    mklink /j "C:\Users\xxx\AppData\Local\Docker" "path to where you relocated your docker folder"
    重启 Docker 桌面

【讨论】:

【参考方案6】:

扩展@Attila Badi 的答案是也对 C:\ProgramData\Docker 文件夹进行相同的处理,该文件夹似乎用于 WSL / Windows 容器。即使移动 Docker 数据文件夹,仍然会给您留下大量的引导驱动器 ProgramData\Docker 文件夹——尤其是在您无法或不愿意清理图像的情况下。您无法迁移它,也无法在安装后移动它。使用 Docker 引擎高级设置在 Linux 容器模式下有效,但在 Windows 中无效,反之亦然,并且无法启动。

我遵循的步骤:

    卸载 Docker。我知道...确保你已经保存了你需要的东西。

    创建主要占用空间的 docker 文件夹,在您有很多空间的位置,例如:

    D:\Data\Docker\ProgramData_Docker & D:\Data\Docker\AppData_Local_Docker

    通过在管理员模式下的命令窗口中运行以下命令来创建链接文件夹:

mklink /j "C:\Users\xxx\AppData\Local\Docker" "D:\Data\Docker\ProgramData_Docker"
mklink /j "C:\ProgramData\Docker" "D:\Data\Docker\AppData_Local_Docker"
    安装 Docker。

您应该能够愉快地拉取 Windows 服务器映像,但不会堵塞您的启动驱动器。

【讨论】:

我试图避免这种方法,但看起来我尝试过的所有方法都对我有用。我认为我的问题是我正在使用新的 docker,但在 WSL1 设置中,2021 年的答案不适用于我。而且位置略有不同,我这里只做了一个链接: mklink /j "C:\ProgramData\DockerDesktop" "D:\work\docker" @AntonKrug 我正在内部 Windows 慢环上运行 WSL 2。 我在 WIN10 LTSC 上,到目前为止只有 WSL1,所以 docker 将内容放入稍微不同的文件夹中,即使我关闭 Docker/Hyper-V,我也无法移动文件夹。但是当我卸载时,准备好 C:\ProgramData\DockerDesktop -> D 驱动器链接,然后再次安装 Docker,然后它完全符合我的要求 同意。 Shutdown 对我也没有任何作用——它仍然在后台某处运行 WSL 机器。很高兴它对你有效。 Docker 应该解决这个问题并使其成为设置的一部分(甚至是高级)。 它不是常规安装的一部分,这很荒谬,docker 不适合普通消费者,但高级用户通常有复杂的分区/hdds 设置,所以我想说 Docker 应该有这个选项很久。实际上,这是我仍然使用其他框架(如 vagrant)的原因之一,它们的构建和设计感觉更加稳固。【参考方案7】:

对我来说,docker 不会从 junction 开始。

然后我只使用了目录符号链接

Docker stopped

Folder "wsl" moved to other location on disk "B"

RUben@AD-RUBEN C:\Users\RUben\AppData\Local\Docker
$ mklink /D wsl "B:\dev\wsl"
**symbolic link** created for wsl <<===>> B:\dev\wsl

容器和图像已准备就绪:

【讨论】:

【参考方案8】:

一个不错的工具:

DDoSolitary/LxRunOffline:用于管理适用于 Linux 的 Windows 子系统 (WSL) 的全功能实用程序

https://github.com/DDoSolitary/LxRunOffline

LxRunOffline.exe move    Move a distribution to a new directory.
Options:
  -n arg                Name of the distribution
  -d arg                The directory to move the distribution to.

例如:

退出 docker 桌面,然后:

wsl --shutdown
LxRunOffline.exe move -n docker-desktop-data -d D:\vm\dockerdesktop\wsl\data

【讨论】:

以上是关于在 Windows 10 Home 上使用 WSL2 上的 Docker Desktop 时,如何更改 docker 映像的位置?的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 10 上的 WSL2 上使用 JDK 的正确方法是啥?

在Windows10上安装WSL使用binwalk命令

使用 WSL 和 VS2019 进行 Cmake

在 Windows 10 上使用 Intellij IDEA 在 WSL 2 中运行和调试 Java

cpp exe文件在wsl上工作但在windows10 cmd上不工作

在 Windows 10 + WSL2 上运行 nvidia-docker