在 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-wsl
或 lxrunoffline
在快速环上对我不起作用。有时你必须先卸载/安装 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 的正确方法是啥?
在 Windows 10 上使用 Intellij IDEA 在 WSL 2 中运行和调试 Java