StackExchanger Asked: 2022-08-11 22:03:17 +0800 CST2022-08-11 22:03:17 +0800 CST 2022-08-11 22:03:17 +0800 CST Windows WSL2“发行版”只是底层的 docker 容器吗? 772 我在 github 上找到了这个文档: WSL2 发行版作为容器运行 虽然它已经有一段时间没有更新了,所以我想知道是否有人知道微软是否已经发布了一个技术文档,描述了 WSL2 分发作为容器的实现。 windows docker 2 个回答 Voted Best Answer NotTheDr01ds 2022-08-12T09:07:28+08:002022-08-12T09:07:28+08:00 你的标题中有一个问题,正文中有一个不同的问题。可以肯定的是,高度相关的问题。 Windows WSL2“发行版”只是底层的 docker 容器吗? 正如@DanielB 已经回答的那样,WSL2 发行版使用了与 Docker 使用的 Linux 内核相同的容器/命名空间技术,但它们不是Docker 容器。 Linux 上的几乎所有容器技术都在核心使用这些相同的技术 - LXCsystemd-nspawn和许多其他技术。 是的,这意味着当我们在 WSL2 上运行 Docker Engine 或 Docker Desktop 时,我们实际上是在 WSL2 托管 VM 内的 (WSL2) 容器中使用 (Docker) 容器。 我想知道是否有人知道 Microsoft 是否已经发布了描述 WSL2 分发作为容器的实现的技术文档。 据我所知,没有。当然,您链接的MicrosoftDocs/WSL Github 问题仍处于打开状态。 在CommandLine devblog 上的 Announceing WSL 2 post 中,提到: 您可以期待在不久的将来发布到此博客的架构的确切更改的更多详细信息,敬请期待! 但是,我从未在博客上看到过深入研究。 我能找到的最接近的描述是在Build 2019 session中。40 多分钟后,提到他们利用标准 Linux 命名空间和容器 API 在 WSL2 VM 内创建分发。 通过检查学习 虽然拥有这方面的深入文档会很棒,但我们现在至少有一个不错的选择——将命令行放入根 WSL2 命名空间并直接检查分发命名空间的能力。 从版本0.51.2开始,您可以将以下内容添加到您的%userprofile%\.wslconfig: [wsl2] debugShell=true 然后发出一个wsl --shutdown. 下次启动 WSL2 发行版时,您还将获得一个单独的控制台,该控制台以 root 身份登录到直接在 WSL2 VM 中运行的 Mariner 发行版。运行 aps axjf将为您提供相当广泛的进程列表,包括在每个发行版中运行的进程。假设您只运行一个发行版,您可以: pgrep -u 1000 bash ... 找到以 uid 1000(默认 WSL uid)运行的 bash shell。然后通过以下方式检查命名空间: lsns -p $(pgrep -u 1000 bash) 我会把它留给你从那里探索。 Daniel B 2022-08-12T06:58:05+08:002022-08-12T06:58:05+08:00 有点,是的。它们是容器,但不涉及 Docker。相反,WSL 2 直接构建在 Linux 技术之上,这些技术也支持 Docker(命名空间和控制组)。 WSL 2 分发容器有自己的 PID 和挂载命名空间,但所有分发共享一个网络命名空间。
你的标题中有一个问题,正文中有一个不同的问题。可以肯定的是,高度相关的问题。
正如@DanielB 已经回答的那样,WSL2 发行版使用了与 Docker 使用的 Linux 内核相同的容器/命名空间技术,但它们不是Docker 容器。
Linux 上的几乎所有容器技术都在核心使用这些相同的技术 - LXC
systemd-nspawn
和许多其他技术。是的,这意味着当我们在 WSL2 上运行 Docker Engine 或 Docker Desktop 时,我们实际上是在 WSL2 托管 VM 内的 (WSL2) 容器中使用 (Docker) 容器。
据我所知,没有。当然,您链接的MicrosoftDocs/WSL Github 问题仍处于打开状态。
在CommandLine devblog 上的 Announceing WSL 2 post 中,提到:
但是,我从未在博客上看到过深入研究。
我能找到的最接近的描述是在Build 2019 session中。40 多分钟后,提到他们利用标准 Linux 命名空间和容器 API 在 WSL2 VM 内创建分发。
通过检查学习
虽然拥有这方面的深入文档会很棒,但我们现在至少有一个不错的选择——将命令行放入根 WSL2 命名空间并直接检查分发命名空间的能力。
从版本0.51.2开始,您可以将以下内容添加到您的
%userprofile%\.wslconfig
:然后发出一个
wsl --shutdown
. 下次启动 WSL2 发行版时,您还将获得一个单独的控制台,该控制台以 root 身份登录到直接在 WSL2 VM 中运行的 Mariner 发行版。运行 aps axjf
将为您提供相当广泛的进程列表,包括在每个发行版中运行的进程。假设您只运行一个发行版,您可以:... 找到以 uid 1000(默认 WSL uid)运行的 bash shell。然后通过以下方式检查命名空间:
我会把它留给你从那里探索。
有点,是的。它们是容器,但不涉及 Docker。相反,WSL 2 直接构建在 Linux 技术之上,这些技术也支持 Docker(命名空间和控制组)。
WSL 2 分发容器有自己的 PID 和挂载命名空间,但所有分发共享一个网络命名空间。