当前位置: 首页 > 知识库问答 >
问题:

如何在Linux上的VirtualBox上运行Windows上的Docker?[关闭]

贺景铄
2023-03-14

主机系统为ARCHLinux。我想开发需要运行Windows docker容器的.NET4.6.1应用程序。所以我在VirtualBox下运行Win10。然后我在Win10中安装Docker,以运行Windows Docker容器。Linux->VirtualBox->Win10->Docker->Windows Docker容器->要运行的应用程序。

或者更具体地说,VirtualBox是否支持Windows 10的WSL 2虚拟化(自2020年5月更新以来可用)?

在VirtualBox上的VM设置中,我选中了“Enable Nested VT-X/AMD-V”、“paravirtualization”下的“Hyper-V”和“Enable Nested Paging”。然后我运行我的Win10 Pro安装。Speccy显示“虚拟化:支持,启用”。WSL 2已安装并正在运行,以及Hyper-V和虚拟机平台功能。当我运行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

更新。当我为VirtualBox机器选择KVM或为准虚拟化选择Hyper-V时,Docker报告虚拟化已禁用。Windows下的任务管理器显示它是一个虚拟机。当我为半虚拟化选择“无”时,Windows显示它没有启用虚拟机和虚拟化(在任务管理器中),但Docker报告“必须在BIOS中启用硬件辅助虚拟化和数据执行保护”(在Win中启用了那些功能:虚拟机平台、Hyper-V、WSL)。

我的机器是Intel(R)Core(TM)i7-9850H CPU@2.60GHz

VirtualBox版本为6.1.10 r138449。

在VMWare 15.5.6下工作(Win10->Docker)。

共有1个答案

年光明
2023-03-14

Docker for Windows需要启用Hyper-V,因为它使Mobylinux在那里运行基于linux的容器,而当它启用时,您就不能运行VMWare工作站或虚拟盒子。

如果您想在一个VM上运行Docker,那么取消选中Hyper-V box并创建一个所需Linux的VM(例如,ArchLinux,centOS等),然后在所述Linux VM上安装Docker,以运行/部署容器。

若要运行Windows容器,必须从托盘图标中更改docker的设置,然后选择允许Windows本机容器的设置,请参阅图像更改为Windows容器。在此之后,您可以像下面这样部署windows容器。

你也可以看看这条线。

 类似资料:
  • 我尝试在Virtualbox VM(windows 2016)上运行Docker for windows,我的主机是Linux机器 在VM设置上启用硬件虚拟化(VT-x/AMD-V) 但我得到以下错误 “必须在BIOS中启用硬件辅助虚拟化和数据执行保护” 这种设置可能吗?

  • 背景: 我已经安装了流浪者和虚拟盒子。我不能改变这个设置,因为它非常微妙和重要。 现在当我在windows 10上安装docker时,docker想启用hyper-v,但现在我无法将我的虚拟机升级为流浪者。 问题: 由于docker on mac使用虚拟盒子驱动程序,有没有解决方案让docker在windows上使用虚拟盒子?

  • 我有一台带有Intel CPU的Windows机器(在引导菜单上启用VMX)。我使用VirtualBox在上面运行Ubuntu Guest。我在上面运行qemu,以运行另一个Guest OS,使用kvm(选项)。 我在尝试插入kvm-intel模块时收到以下错误: 我已经检查了来宾操作系统中的vpx标志,但我也没有看到 有没有办法在来宾Ubuntu操作系统中启用kvm支持,以便我可以在Ubuntu

  • 问题内容: 我已成功将docker用于Windows 10上带有Linux容器的Windows窗口-但现在我想使用新的闪亮Windows Server 2016进行该任务-但是如何呢? 我已经使用此指南安装了Docker功能:https : //msdn.microsoft.com/zh- cn/virtualization/windowscontainers/quick_start/quick_

  • 问题内容: 我想在Windows 10上使用minikube。我已经安装了VirtualBox,并希望将其用作minikube的虚拟机。我也为Windows安装了Docker。但是在安装过程中,Docker被迫默认使用Hyper-V。但这意味着我不能再使用VirtualBox运行minikube!不知道我在这里想念什么。 我在Mac上使用过minikube,这要简单得多:只需打开VirtualBo

  • 问题内容: 运行Airflow的常规说明不适用于Windows环境: Airflow实用程序在命令行中不可用,我在其他地方找不到要手动添加的实用程序。Airflow如何在Windows上运行? 问题答案: 您可以在Windows中激活,并直接按照本教程进行操作。我能够按照上面的步骤启动并成功运行。 安装完成后,请进行编辑以将所有配置指向Windows系统中的某个位置,而不是lxss(ubuntu)