运行WSL 2引擎的Docker桌面使用docker-desktop-data发行版的目的是什么?

57
当在Windows上使用Hyper-V运行Docker桌面时,我有一个名为DockerDesktopVM的单个虚拟机,在其中运行我的Linux虚拟机及其容器。

DockerDesktopVM

然而,当我使用WSL引擎运行docker桌面时,我发现它创建了2个WSL发行版。

  1. docker-desktop
  2. docker-desktop-data

enter image description here

我可以像登陆其他发行版一样进入docker-desktop发行版。

enter image description here

但是尝试对docker-desktop-data执行相同的操作,却无法成功。

enter image description here

所以我的问题是,docker-desktop-data发行版是用来做什么的,为什么它与docker-desktop发行版分开存在?显然名称暗示了数据,但具体是哪些数据,为什么我不能像任何其他发行版一样进入该发行版?
3个回答

52

docker-desktop-data distro被用作docker-desktop发行版的后端支持,用于容器镜像等。在Hyper-V下运行docker时,通过将VHD挂载到Hyper-V中的映像来实现相同的结果,但在WSL2中无法这样做。

引自Docker官方博客介绍新的WSL2后端:

这将为您创建两个WSL发行版:

Docker-desktop, which I’ll call the bootstrapping distro
Docker-desktop-data, which I’ll call the data store distro

从高层次的角度来看,启动引导发行版基本上取代了Hyper-V,而数据存储发行版则取代了我们以前连接到VM的VHD。

启动引导发行版创建一个Linux命名空间,其根文件系统基于我们之前提到的两个iso文件(不完全准确,但足够接近),并使用数据存储发行版作为容器镜像等的后备存储,而不是VHD(WSL 2目前不允许我们附加额外的VHD,因此我们利用跨发行版挂载进行操作)。

为了防止您能够wsl -d ubuntu-desktop-data,该发行版具有0字节的/init

博客文章 是介绍如何在wsl上运行docker的很好的入门资料。


2
一个相关的问题:为什么它总是在运行?当WSL发行版内没有运行进程时,它们会停止。当没有容器运行时,为什么要保持这些WSL2发行版运行?它们占用2GB以上的内存,毫无意义。 - Meteorhead
3
他们在奔跑,是因为 Docker Desktop 正在运行。 - Adam Cooper
我在想,因为我不需要实际运行虚拟机来让 Hyper-V 告诉我我的计算机上存在哪些虚拟机,那样做是愚蠢的。如果没有 Linux 容器正在运行,这些 WSL2 实例真的需要一直运行吗? - Meteorhead
1
使用 Hyper-V 启动 Docker Desktop 时,它会启动一个带有 WSL 的虚拟机;而使用 WSL2 时,它将启动两个 WSL2 发行版。因此,如果您不启动 Docker,则 WSL2 实例将无法运行。 - Adam Cooper
我停止了 Docker Desktop,但 vmmem 仍然使用2.5G的内存:( - Onur Demir
1
@OnurDemir,是的,这是WSL2已知的问题,有时它不会返回内存。请参见官方Microsoft文档结尾处的评论:https://learn.microsoft.com/en-us/windows/wsl/compare-versions#exceptions-for-using-wsl-1-rather-than-wsl-2,以及他们提到的GitHub问题:https://github.com/microsoft/WSL/issues/4166。 - Uyric

2
显然,名称暗示了数据,但是具体是什么数据,为什么我不能像进入其他文件夹一样进入发行版呢?
我不确定为什么这还没有被指出,因此我想这可能在这里不为人知。
如果您进入文件浏览器(至少内置的资源管理器,但任何一个都可以),您可以通过从同一台计算机访问\\wsl.localhost\\wsl$来浏览所有正在运行的WSL2文件系统。
由于WSL2的工作方式,VHD实际上并未挂载,它们本质上是创建为网络驱动器,已挂载在WSL发行版中。更多或更少信息。
docker-desktop-data是存储所有图像和特性的地方。\\wsl$\docker-desktop-data\data\docker\volumes\实际上是所有卷所在的位置。您知道如何浏览Portainer的卷需要代理吗?您只需转到此处并像浏览任何Windows文件夹一样浏览它们。我认为图像位于名称中包含containerd的文件夹中的\\wsl$\docker-desktop-data\data\<<FOLDERS WITH containerd IN THE NAME>>\文件夹中,因为它们的大小似乎相匹配,但可悲的是浏览它不太实用,应该小心处理。
虽然被接受的答案提供了“什么是它”和“为什么它存在分开”的答案,“什么数据”和“为什么我无法进入它”的问题却没有得到解答。我个人认为,卷浏览是您在此处执行的最有用的操作之一,因为它比任何其他访问方法更方便,但是整个文件结构都在那里,可以按照您的意愿使用。

-1

据我所见,'docker-desktop' 前面的'*' 表示它是头或主干分支。因此,'-d' 命令将仅在该分支上运行。 尝试切换到 'docker-desktop-data',然后您可能可以运行特定的发行版。

DOCKER-DESKTOP-DATA: 输入图像说明


4
实际上不是这样的—— docker-desktop-data 是一种非可启动的 WSL “分区”,仅用于数据。它有一个大小为 0 字节的 /init(参见 这里),这会阻止您能够 wsl -d ubuntu-desktop-data(或将其用作默认值)。 - NotTheDr01ds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接