在Ubuntu 18.04.5 LTS上的VirtualBox中,WSL2无法在Windows 10虚拟机中运行。

WSL2对我来说无法工作。笔记本电脑的BIOS和VirtualBox虚拟机设置中都启用了虚拟化。以下是我的配置。
- 主机:Alienware17r3,Intel i7,32GB RAM - BIOS:已启用虚拟化 - 操作系统:Ubuntu 18.04.5 LTS - Hypervisor:Oracle VirtualBox 6.12r139181(Qt5.9.5) - 虚拟机:Windows 10 Home 20H2 (19042.450) - 已启用的虚拟机设置:System->Processor-> - 启用PAE/NX - 启用嵌套VT-x/AMD-V - Windows设置->可选功能->更多 - Windows功能:已勾选 - 虚拟机平台 - Windows Hypervisor平台 - Windows子系统用于Linux
最后尝试在WSL2中启动Ubuntu 20.04 LTS。
WslRegisterDistribution failed with error: 0x80370102
Error: 0x80370102 The virtual machine could not be 
started because a required feature is not installed.

Press any key to continue...

我在每次 Windows 更新后都尝试过很多次在 WSL2 上运行 Docker 的实验。BIOS 和 OracleBox Windows10 VM 中已启用了虚拟化功能。然而,仍然有一些问题阻止我在 Linux 上的 VirtualBox VM 中使用 WSL2,在这个虚拟机中运行着正式授权的 Windows 操作系统。

你为什么要在运行Ubuntu的主机系统中的Windows虚拟机内运行WSL?你想要实现什么目标?有没有某些原因需要使用“俄罗斯套娃”式的情况?为什么不能在主机操作系统(Ubuntu)上运行另一个虚拟机呢? - Nmath
1我需要确保基于Docker和Docker Compose的微服务在Windows 10环境中正常工作,作为我的团队成员的本地构建/测试/开发环境之一。然而,我在我的笔记本电脑上运行的是Ubuntu 18.04。因此,我需要在虚拟机中运行Windows 10,并嵌入Docker的wsl2。当我的Ubuntu笔记本电脑已经有32GB内存和一个带有8个线程的i7处理器时,我不想再购买一台独立的计算机。 - eaglet3d
你的方案不是测试这个问题的可靠方式。此外,WSL并不打算运行服务。你不应该使用WSL来运行服务:https://docs.microsoft.com/zh-cn/windows/wsl/faq#can-i-run-all-linux-apps-in-wsl 你不需要WSL来运行Docker。WSL是一个不适合这项工作的工具。 - Nmath
根据微软的“WSL 2常见问题解答”(参考:我可以在虚拟机中运行WSL 2吗? “是的!您需要确保虚拟机启用了嵌套虚拟化。” - eaglet3d
我已确认在Windows虚拟机中启用了虚拟化功能:任务管理器 -> 性能 -> CPU: 虚拟化 = 是。WSL 2与WSL不同。WSL 2添加了可以运行“服务”的Docker。作为一个测试环境,让Linux主机运行Windows虚拟机可能是构建和测试本地微服务测试/开发部署的最有效的测试环境,使用Docker。 - eaglet3d
我从微软链接的常见问题解答已于九月更新。其中提到:“尽管您可以运行许多流行的服务器应用程序(例如Redis),但我们不建议使用WSL来托管生产服务 - 微软提供了多种解决方案,可在Azure、Hyper-V和Docker中运行生产Linux工作负载”。如果您进一步阅读技术文档,将会有更好的解释,说明为什么不应该使用WSL来提供服务。一个测试环境的重要条件难道不是与生产环境相同吗? - Nmath
3我不明白你的推理。我正在尝试使用微软和Docker宣传的WSL2(参考:"Could you describe a typical development workflow that incorporates WSL?""Docker Desktop WSL 2 backend")。我从未说过这是要在"生产环境"中运行,为什么你还在一直强调呢?这只是为了测试实际的测试/开发环境部署。 - eaglet3d
3@eaglet3d 在虚拟机中运行WSL2来测试一些东西是完全有道理的,尤其是如果你正在尝试开发一个WSL 2发行版。回复你的人简直就是在另一个星球上。 - Christian Stewart
@eaglet3d 你解决了这个问题吗?我目前也遇到了同样的问题,Ubuntu -> Virtual Box (Windows) -> Docker。但是由于wsl2错误,Docker始终无法启动。 - Dylan Kerler
2个回答

经过3个工作日的折腾,我找到了唯一的解决方案: 使用VMWare Workstation 16。我从Microsoft下载了Windows 10的VMware虚拟机,并通过'wsl -l -v'验证了Ubuntu发行版正在使用WSL2,然后第一次尝试成功地启动了Ubuntu发行版。
我复制了以下完全相同的Virtualbox错误: 主机:P53; BIOS:启用了虚拟化; 操作系统:Ubuntu 20.04 LTS; 虚拟化软件:Oracle VirtualBox 6.1.16_Ubuntu r140961 (Qt5 12.8); 虚拟机:Windows 10,版本2004 (10.0.19041.0); 虚拟机设置已启用:系统->处理器->启用嵌套VT-x/AMD-V(如果还启用PAE/NX也会得到相同结果); Windows设置 -> 可选功能 -> 更多; 已勾选的Windows功能: 虚拟机平台; 适用于Linux的Windows子系统。
我在使用虚拟机(VirtualBox VM)时也遇到了类似的问题,下载链接在这里:https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/
我保留了微软默认设置的所有虚拟机(WSL2 Ubuntu分发版)设置来运行。当我打开Ubuntu分发版时,出现了一个错误提示,说我需要启用“虚拟机平台”或在BIOS中启用虚拟化。显然这些都已经启用了。
我尝试了多次卸载和重新安装,但结果都一样。我得出结论,在Ubuntu 20.04上,虚拟化功能(HyperV虚拟化所需的功能),即WSL2所依赖的功能,在Virtualbox 6.1上无法正常工作,尽管VirtualBox在版本6.1中声称具备该功能。
请参考这里:https://forums.virtualbox.org/viewtopic.php?f=6&t=98448 "微软现在将其操作系统变成了一个移动目标,因此开发人员必须跟上。" 如果在Ubuntu上安装Virtualbox 6.1时曾经有过虚拟化功能的工作,那么现在已经不再有效。
最后一点,我需要这个解决方案能够满足与发帖者相同的原因。我正在测试一个PowerShell脚本,该脚本将安装所有必要的软件以运行我们的本地开发环境。本地环境包括一个minikube的安装,它使用默认的docker驱动程序,在Windows上是实验性的,但可以通过minikube文档中发布的解决方法来使用(我希望我的团队成员像我一样使用Ubuntu)。 在测试安装脚本时,使用虚拟机进行快照和还原比在裸机上更容易。

尝试使用KVM/QEMU和嵌套虚拟化进行相同的失败。安装了W10 Guest后,WSL2无法启动,卡在“准备修复...”的重启过程中。 我猜Hyper-V不喜欢在另一个虚拟化管理程序中运行!