主机系统为Archlinux。我想开发需要运行Windows docker容器的.NET 4.6.1应用程序。因此,我在VirtualBox下运行Win10。然后,我在Win10中安装Docker以运行Windows docker容器。Linux -> VirtualBox -> Win10 -> Docker -> Windows docker容器 -> 应用程序。
更具体地说,VirtualBox是否支持WSL 2虚拟化Windows 10(自2020年5月更新起可用)?
在我的VirtualBox的VM设置中,我勾选了 "启用嵌套VT-x/AMD-V"、"Hyper-V"和 "启用嵌套分页"。然后我运行我的Win10 Pro安装。Speccy显示“虚拟化:支持,已启用”。WSL 2已安装并运行,Hyper-V和Virtual Machine Platform功能也已启用。当我运行Docker时,会出现以下错误。
System.InvalidOperationException:
Failed to deploy distro docker-desktop to C:\Users\WinUser\AppData\Local\Docker\wsl\distro: exit code: -1
stdout: Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS.
For information please visit https://aka.ms/wsl2-install
stderr:
at Docker.Core.WslShortLivedCommandResult.LogAndThrowIfUnexpectedExitCode(String prefix, ILogger log, Int32 expectedExitCode) in C:\workspaces\stable-2.3.x\src\github.com\docker\pinata\win\src\Docker.Core\WslCommand.cs:line 119
at Docker.Engines.WSL2.WSL2Provisioning.<DeployDistroAsync>d__16.MoveNext() in C:\workspaces\stable-2.3.x\src\github.com\docker\pinata\win\src\Docker.Desktop\Engines\WSL2\WSL2Provisioning.cs:line 142
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Docker.Engines.WSL2.WSL2Provisioning.<ProvisionAsync>d__6.MoveNext() in C:\workspaces\stable-2.3.x\src\github.com\docker\pinata\win\src\Docker.Desktop\Engines\WSL2\WSL2Provisioning.cs:line 44
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Docker.Engines.WSL2.LinuxWSL2Engine.<DoStartAsync>d__23.MoveNext() in C:\workspaces\stable-2.3.x\src\github.com\docker\pinata\win\src\Docker.Desktop\Engines\WSL2\LinuxWSL2Engine.cs:line 91
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Docker.ApiServices.StateMachines.TaskExtensions.<WrapAsyncInCancellationException>d__0.MoveNext() in C:\workspaces\stable-2.3.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\TaskExtensions.cs:line 29
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__5.MoveNext() in C:\workspaces\stable-2.3.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\StartTransition.cs:line 67
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__5.MoveNext() in C:\workspaces\stable-2.3.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\StartTransition.cs:line 92
更新: 当我选择使用KVM或Hyper-V作为VirtualBox机器的半虚拟化选项时,Docker报告虚拟化被禁用。Windows的任务管理器显示它是一台虚拟机。当我选择无半虚拟化选项时,Windows显示它不是虚拟机并启用了虚拟化(在任务管理器中),但Docker报告“必须在BIOS中启用硬件辅助虚拟化和数据执行保护”(在Windows中启用了这些功能:虚拟机平台、Hyper-V、WSL)。
我的机器是Intel(R) Core(TM) i7-9850H CPU @ 2.60GHz
VirtualBox版本是6.1.10 r138449。
在VMWare 15.5.6下它可以正常工作(Win10-> Docker)。
Linux容器
之外的Windows容器
? - Dupinder Singh