将Docker Desktop(WSL 2 方式)文件存储移出系统盘

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Docker Desktop(WSL 2 方式)文件存储移出系统盘相关的知识,希望对你有一定的参考价值。

参考技术A 默认情况下,Docker Desktop for Window会创建如下两个发行版(distro):
docker-desktop:用于存放程序
docker-desktop-data:用于存放镜像

如果访问 %LOCALAPPDATA%/Docker/wsl 目录,就可以看到两个文件夹,同时每个文件夹中都会有一个vhdx文件。

'data/ext4.vhdx'被docker-desktop-data 发行版使用;
'distro/ext4.vhdx'被 docker-desktop 发行版使用;
docker-desktop-data 是被用来存储docker images 以及相关的数据。因此,它的大小会随着使用逐步增长,因此导致系统盘空间不足。

ps: 可以试试命令

①查看所有容器:
cmd运行 docker ps -a
②删除已部署容器
cmd运行 docker rm 容器id 或者直接打开docker 在Containers/Apps里面删除所有容器
③再次检查容器是否删除干净
docker ps -a

wsl --shutdown

wsl --list --verbose

如下状态都为Stopped则都已关闭

①创建文件夹,目录根据自己实际情况指定。(本人使用D:\docker)。
②通过下面命令,将已有的数据,以tar格式备份已有数据到指定目录(D:\docker)
wsl --export docker-desktop-data D:\docker\docker-desktop-data.tar

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

'docker-desktop-data'与'docker-desktop'就是第4步中,列举出来的用于存放镜像和程序的发行版本。

wsl --unregister docker-desktop-data

wsl --unregister docker-desktop

该命令执行完成之后,再次使用 wsl --list --verbose 命令查看,'docker-desktop-data'与'docker-desktop'就已经不在了。

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

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

命令执行完成后使用 wsl --list --verbose 命令查看,皆已恢复。

'D:\docker\data'与'D:\docker\docker-desktop'即指定vhdx新的放置目录。
'D:\docker\docker-desktop-data.tar'与'D:\docker\docker-desktop.tar'指定第5步中备份的数据

Docker Desktop 运行成功之后,查看新目录中的vhdx的修改时间,如果修改时间是最新时间,就说明配置成功。

基于WSL2 的 Docker Desktop 启动时 Failed to set version to docker-desktop exit code -1的解决方法

在Windows 10 的 2004 版本 中, 启用 使用Docker Desktop 时 发现 根本无法启动, 偶尔或者频繁的出错:

System.InvalidOperationException:
Failed to set version to docker-desktop: exit code: -1?

System.InvalidOperationException:
Failed to set version to docker-desktop: exit code: -1?

stderr:?
? ?在 Docker.ApiServices.WSL2.WslShortLivedCommandResult.LogAndThrowIfUnexpectedExitCode(String prefix, ILogger log, Int32 expectedExitCode) 位置 C:workspacesPR-15077srcgithub.comdockerpinatawinsrcDocker.ApiServicesWSL2WslCommand.cs:行号 146
? ?在 Docker.Engines.WSL2.WSL2Provisioning.<ProvisionAsync>d__8.MoveNext() 位置 C:workspacesPR-15077srcgithub.comdockerpinatawinsrcDocker.DesktopEnginesWSL2WSL2Provisioning.cs:行号 82
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
? ?在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
? ?在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
? ?在 Docker.Engines.WSL2.LinuxWSL2Engine.<DoStartAsync>d__25.MoveNext() 位置 C:workspacesPR-15077srcgithub.comdockerpinatawinsrcDocker.DesktopEnginesWSL2LinuxWSL2Engine.cs:行号 99
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
? ?在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
? ?在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
? ?在 Docker.ApiServices.StateMachines.TaskExtensions.<WrapAsyncInCancellationException>d__0.MoveNext() 位置 C:workspacesPR-15077srcgithub.comdockerpinatawinsrcDocker.ApiServicesStateMachinesTaskExtensions.cs:行号 29
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
? ?在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
? ?在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
? ?在 Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__5.MoveNext() 位置 C:workspacesPR-15077srcgithub.comdockerpinatawinsrcDocker.ApiServicesStateMachinesStartTransition.cs:行号 67
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
? ?在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
? ?在 Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__5.MoveNext() 位置 C:workspacesPR-15077srcgithub.comdockerpinatawinsrcDocker.ApiServicesStateMachinesStartTransition.cs:行号 92

启动 WSL 2时警告“参考的对象类型不支持尝试的操作”

管理员方式执行cmd命令

netsh winsock reset

然后启动 docker-desktop

转载csdn博文:

https://blog.csdn.net/MShow006/article/details/103774672

https://blog.csdn.net/mysticboy/article/details/106632922

以上是关于将Docker Desktop(WSL 2 方式)文件存储移出系统盘的主要内容,如果未能解决你的问题,请参考以下文章

Docker Desktop WSL 2 backend

WSL2 子系统迁移(docker&ubuntu)

使用 WSL2 在 Docker Desktop 上运行的容器没有实时输出

WSL2修改存储位置(示例:Docker-Desktop)

wsl2迁移docker的ext4.vhdx

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