如何在 Windows 上运行多个 WSL2 实例?

Posted

技术标签:

【中文标题】如何在 Windows 上运行多个 WSL2 实例?【英文标题】:How to run multiple WSL2 instances on Windows? 【发布时间】:2021-05-09 22:07:25 【问题描述】:

我已经安装了 WSL2 并在上面部署了两台机器:

CentOS Ubuntu-20.04

是否可以在我的 win10 机器上运行多个 Ubuntu-20.04 实例?

【问题讨论】:

【参考方案1】:

是的,完全有可能。这是我推荐的步骤。在 PowerShell 中(也可以使用 cmd):

在您想要使用 WSL 图像的方便位置创建一个目录。当然,我的名字是WSL。这不必在您的 C:\ 驱动器上。

创建两个子目录,imagesinstances。同样,名称完全取决于您。

wsl -l -v 只是为了确认您当前的发行版名称。

使用 wsl --export Ubuntu images\2021-02-05_Ubuntu20.04_snapshot.tgz 之类的东西备份您现有的 20.04 发行版(当然,假设您的发行版名为“Ubuntu”)。

使用类似wsl --import Ubuntu20.04_clone instances\Ubuntu20.04_clone images\2021-02-05_Ubuntu20.04_snapshot.tgz --version 2 的快照创建一个新实例。完成后,您应该在 instances\Ubuntu20.04_clone 目录中看到一个 ext4.vhdx 文件。 --version 是可选的,但表明您可以在需要时并排创建 WSL1 和 WSL2 实例。 (例如,如果您需要访问 NTFS 文件系统,WSL1 会快得多。)

使用wsl ~ -d Ubuntu20.04_clone 启动该实例。或者重新启动 Windows 终端(假设您正在使用它),应该会自动检测到新实例。

默认情况下,新实例将以 root 身份启动。您需要通过使用以下内容创建/etc/wsl.conf 来设置您的用户名:

[user]
default=me

...当然,替换您的用户名。

退出并重新启动该发行版,并确认您的环境正在按预期运行。

现在您已确认您的新实例正常运行,以下步骤是可选的,但建议执行。 (有关替代方法,请参阅this Reddit thread 中的 u/Zoredache 的 cmets(复数)。

wsl --unregister <distroname>将旧图像“重置”为原始分发的干净状态。

使用 Start->Run 从 Windows 开始菜单重新运行“App”(技术上它是“App Execution Alias”),然后键入 Ubuntu。这将重新运行配置步骤并创建您的默认用户/密码/等。 (感谢@JackoBongo 在 cmets 中对此提出的建议)。

为方便起见,我建议继续并将上述/etc/wsl.conf 添加到此实例中。这将使您不必在每次添加或替换实例时都这样做。注意:如果您打算将此图像分发给其他用户,请不要这样做;只是如果你是为自己做这件事。

使用上面的wsl --export 命令将这个“干净副本”备份到2021-02-05_Ubuntu20.04_default.tgz 之类的东西。如果您想启动一个新的 Ubuntu 20.04 来测试一些东西,而不必担心您的正常工作环境中的应用程序/自定义设置会妨碍您,那么这个“干净”版本现在可以成为您的 wsl --import 的起点。

既然您已经在运行多个发行版(CentOS 和 Ubuntu),那么我猜您已经在使用类似 Windows Terminal 的东西了。但是,如果您通过开始菜单使用“Ubuntu”条目启动 Ubuntu,那么您可能希望将克隆的 vhdx 文件复制回新安装的干净版本。你会在%userprofile%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc(或类似的东西)中找到“默认”版本。

【讨论】:

谢谢!顺便问一下,这些实例是并行运行的,还是以某种方式分时共享一个单例内核? 注意/etc/wsl.conf=前后不能有空字符 谢谢!已编辑。 如果您想从全新状态重新启动,似乎不需要卸载 Ubuntu 并重新下载。只需取消注册当前的 Ubuntu 发行版 (wsl --unregister Ubuntu) 并从开始菜单再次启动它。将出现一个控制台窗口并开始初始安装过程。 谢谢@JackoBongo - 这是一个很好的观点,并且确实简化了事情。我终于开始编辑答案以包含您的建议。我相信这也适用于商店中的任何 WSL 发行版(不仅仅是 Ubuntu)。我使用 Alpine 进行了测试,但该过程对其他人也应该有效。【参考方案2】:

GitHub(我的项目)上还有一个用于管理多个 WSL2 实例的 GUI。可能会为您节省一点时间。

【讨论】:

看起来很酷。一直在考虑做类似的事情,但我为 WSL 参数编写了 PowerShell autocompletions。我很快就会检查你的。我的下一步可能是基于dialog 在终端中运行它,但我喜欢 Flutter 的概念。也只是提醒 Stack requires you to disclose 当你这样做时你正在链接到你自己的项目。 @NotTheDr01ds Oups,我忘了。马上加了。您的自动完成项目看起来确实不错。当您不想处理 GUI 时,这将节省大量时间。不幸的是,Windows 的 PS/cmd 自动补全并不像 Linux 的那样经过深思熟虑。

以上是关于如何在 Windows 上运行多个 WSL2 实例?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 127.0.0.1 从 Windows 主机访问在 WSL2 中运行的服务?

如何从 Docker 容器内部访问在 WSL2 上运行的服务?

如何在windows 11中安装WSLG(WSL2)

在 Linux 主机上运行的 Windows 10 来宾 VM 中运行 WSL2

如何在 Windows 上运行多个 Tor 浏览器实例?

安装 WSL2 后,Android Studio 模拟器无法在 Windows 11 上运行