启动虚拟机"MobyLinuxVM"失败,因为其中一个Hyper-V组件未运行。

59

安装Docker时我遇到了一些问题,操作环境如下:

1. Windows 10(物理机)
2. VMware® Workstation Player(12或以上版本)链接
3. 虚拟机上运行Windows Server 2016
4. Docker CE for Windows(稳定版)链接

以下是问题的截图和内容:
图片描述

Unable to start: The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: 'MobyLinuxVM' failed to start.

Failed to start the virtual machine 'MobyLinuxVM' because one of the Hyper-V components is not running.

'MobyLinuxVM' failed to start. (Virtual machine ID BBD755F7-05B6-4933-B1E0-F8ACA3D2467B)     

The Virtual Machine Management Service failed to start the virtual machine 'MobyLinuxVM' because one of the Hyper-V components is not running (Virtual machine ID BBD755F7-05B6-4933-B1E0-F8ACA3D2467B).
at Start-MobyLinuxVM, <No file>: line 315
at <ScriptBlock>, <No file>: line 410
   at Docker.Backend.ContainerEngine.Linux.DoStart(Settings settings, String daemonOptions) in C:\gopath\src\github.com\docker\pinata\win\src\Docker.Backend\ContainerEngine\Linux.cs:line 256
   at Docker.Backend.ContainerEngine.Linux.Start(Settings settings, String daemonOptions) in C:\gopath\src\github.com\docker\pinata\win\src\Docker.Backend\ContainerEngine\Linux.cs:line 130
   at Docker.Core.Pipe.NamedPipeServer.<>c__DisplayClass9_0.<Register>b__0(Object[] parameters) in C:\gopath\src\github.com\docker\pinata\win\src\Docker.Core\pipe\NamedPipeServer.cs:line 47
   at Docker.Core.Pipe.NamedPipeServer.RunAction(String action, Object[] parameters) in C:\gopath\src\github.com\docker\pinata\win\src\Docker.Core\pipe\NamedPipeServer.cs:line 145

我该如何修复这个问题,谢谢。


6
您是否尝试在虚拟机中运行 Windows 版本的 Docker? - Mathias
1
嗨@Mathias,是的,在Windows上。 - Willie Cheng
10个回答

39
如果您在安装了Docker并且这已经是支持嵌套虚拟化的VM的Azure Windows 10 VM上遇到了此错误,则以下是一个解决方案,换句话说,您的Azure VM必须至少为V3大小DV3EV3):
  • 运行PowerShell命令启用Windows Hyper-V功能:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All -Verbose

  • 运行PowerShell命令启用Windows容器功能:

Enable-WindowsOptionalFeature -Online -FeatureName Containers -All -Verbose

  • 提升的命令提示符中运行以下命令,确保Hypervisor在Boot Configuration Database(BCD)中自动启动:

bcdedit /set hypervisorlaunchtype Auto

运行以上步骤并重新启动Azure VM后,Docker应该能正常启动。

除了上面的答案之外,设置虚拟机设置的PowerShell cmdlet是:

Set-VMProcessor -VMName <输入虚拟机名称> -ExposeVirtualizationExtensions $true -Verbose

仍然有问题且尚未重新启动?!只需通过运行以下命令重新启动Windows服务即可:

net stop vmms 
net start vmms

1
Docker在某次Windows更新后停止工作了...多亏了你的解决方案,现在它又可以正常运行了 :) - Pavel Biryukov
我在Win 10 Azure VM中确切地按照这些步骤操作,但是docker仍然显示相同的错误。正在调查中... - stmax
3
看起来 Docker 只能在某些 Azure VM 上运行,例如 D*_v3 和 E*_v3。例如,在 D*_v2 上无法运行。将我的 VM 调整大小为 D*_v3 后,Docker 成功启动了。 - stmax
是的,确实 - 第一条规则是您的VM必须支持“嵌套虚拟化”-请查看Azure文档; 本答案提供的解决方案是在VM已经具备嵌套虚拟化功能的情况下。 - Emil
1
正如您所解释的那样,标准 D2s v3(2 个 vCPU,8 GiB 内存)解决了这个问题。 - Mustafa Salih ASLIM

32

如果这能帮到其他人解决同样的问题,我发现在管理员命令提示符下运行以下命令可以解决我的 Hyper-V 问题:

在管理员命令提示符下运行以下命令可以解决我的 Hyper-V 问题:

net stop vmms 
net start vmms

我随后能够毫无问题地启动我的Docker容器。


我在 Azure 虚拟机上运行 Windows 10 Pro,它对我有效。 - pango89

18

大家好,我找到了解决这个问题的方法,希望这篇内容能帮助遇到相同问题的人。
1. 在虚拟机设置中设置虚拟机(如下图所示)图片描述

图片描述

  1. 在 Windows Server 2016 上设置 Hyper-V(如下图所示)图片描述

参考链接:URL


1
我在第一张截图中哪里可以找到那些设置? - Charles Morin
@CharlesMorin添加了另一张图片,有帮助的是它可以帮助你。 - Willie Cheng

10
在Azure虚拟机中,仅启用Hyper-V特性是不足够的。您还需要启用"嵌套虚拟化"功能。根据文档,您应选择v3大小的虚拟机:

所有v3虚拟机都支持嵌套虚拟化

调整大小后,虚拟机将重新启动,Hyper-V中的DockerVM将运行。


1
谢谢,真是太棒了! - Erick Boshoff

7

这是一个嵌套虚拟化问题,为了解决在运行VMWare 6.5和Windows 10客户机时,请关闭虚拟机并选择将硬件辅助虚拟化暴露给客户操作系统的选项。

输入图像描述


4
  1. Open up a PowerShell or CMD session as Administrator.

  2. Type the following command:

    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
    

我刚刚发现它需要在虚拟机中运行,而不是在主机上运行。 - Krunal
1
这个答案已经被添加了 - Liam

2
我去了Docker设置,在“常规”部分选择安装“其他版本”(页面底部链接)。我最初安装了“稳定版”,然后改为“beta” / edge。这一切都没有出现任何问题。

1

实际上,原因是您在主机上没有启用ExposeVirtualizationExtensions。
关闭嵌套虚拟机。 在主机上运行PS命令:

Set-VMProcessor -VMName "NESTED VM NAME" -ExposeVirtualizationExtensions $true

然后再次启动嵌套的虚拟机(其中包含docker)。


1
当我尝试在Windows虚拟机上运行Docker桌面版时,出现了一个奇怪的错误。通过右键单击托盘上的Docker图标并切换到Docker上下文菜单中的Windows容器,问题得以解决。enter image description here

0

VMWare

对于VMWare,要在Guest OS上启用硬件虚拟化,您需要从VMWare Web客户端进行操作。请注意,传统的桌面客户端没有启用Guest OS上的硬件虚拟化选项。记得先关闭Guest OS,否则该选项将被禁用。

enter image description here

enter image description here

请参阅:https://github.com/docker/for-win/issues/4470#issuecomment-519511295

Windows Hypervisor(Windows 原生虚拟化技术)

如果使用的是 Windows Hypervisor(而不是 VM Ware 等其他虚拟化软件),则需要从主机运行以下命令:

Set-VMProcessor MyVM2 -ExposeVirtualizationExtensions $true

请参见:https://github.com/docker/for-win/issues/4470#issuecomment-579529145

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接