必须为 hyper-v 虚拟机启用嵌套虚拟化才能运行 windows 容器(hyper-v 隔离模式),需满足处理器、宿主机系统、vm 版本及 guest os 等硬性前提,并通过 powershell 执行 set-vmprocessor -exposevirtualizationextensions $true,再配置固定内存、vcpu、启用 containers 和 hyper-v 功能,以及开启 mac 地址欺骗。
要在 hyper-v 虚拟机中运行 windows 容器(特别是启用 hyper-v 隔离模式的容器),必须先为该虚拟机启用嵌套虚拟化。这不是单纯安装 docker 或启动容器就能完成的配置,而是一整套底层硬件支持、宿主机设置和虚拟机参数协同生效的过程。
确认宿主机与虚拟机满足硬性前提
嵌套虚拟化不是“开个开关就成”,它对软硬件有明确门槛:
- 处理器需支持并已开启虚拟化扩展:Intel 平台需 VT-x + EPT;AMD 平台需 AMD-V + AMD-Vi(SLAT),且 BIOS/UEFI 中必须启用 SVM Mode(锐龙/霄龙平台默认支持,但常被误关)
- 宿主机系统:Windows 10 20H2(版本 19042)或更高;Windows 11 或 Windows Server 2022 及以上(AMD 平台在 Server 2019 原生不支持,需升级)
- 目标虚拟机配置版本必须 ≥ 8.0(Intel)或 ≥ 9.3(AMD),可通过 Hyper-V 管理器 → 虚拟机属性 → “检查点”页底部查看
- 虚拟机操作系统需为支持容器功能的 Windows 版本(如 Windows Server 2016+、Windows 10 1809+、Windows 11)
为虚拟机启用嵌套虚拟化(PowerShell 是唯一可靠方式)
图形界面无法完成这一步,必须使用管理员权限的 PowerShell:
- 确保虚拟机已完全关闭(不是保存状态或暂停)
- 在宿主机上执行:Set-VMProcessor -VMName "YourVMName" -ExposeVirtualizationExtensions $true
- 若后续需关闭嵌套,改用:Set-VMProcessor -VMName "YourVMName" -ExposeVirtualizationExtensions $false
- 此命令本质是让虚拟 CPU 暴露 VT-x/AMD-V 指令给 Guest OS,是容器 Hyper-V 隔离模式运行的物理基础
配置虚拟机内部环境以支持容器
仅开启嵌套还不够,Guest 系统本身要能承载容器运行时:
- 分配固定内存:禁用动态内存,至少分配 4 GB RAM(容器 + Hyper-V 隔离层本身需额外资源)
- 分配足够 vCPU:建议 ≥ 2 个虚拟处理器(单核可能因调度冲突导致容器启动失败)
- 在虚拟机内启用 Windows 功能:Containers 和 Hyper-V(后者是隔离容器必需的,即使你只跑容器也要装)
- 安装 Docker Desktop(Windows 版)或直接使用 dockerd.exe + containerd,并选择 Hyper-V 隔离作为默认运行模式
网络与安全注意事项
嵌套容器的网络链路比普通 VM 更深一层,容易出连通性问题:
- 必须启用 MAC 地址欺骗:运行 Get-VMNetworkAdapter -VMName "YourVMName" | Set-VMNetworkAdapter -MacAddressSpoofing On
- 推荐使用 内部虚拟交换机或 NAT 网络,避免外部交换机下多层 NAT 导致端口映射失效
- Windows Sandbox 不适用此场景——它是轻量级临时沙盒,不提供嵌套虚拟化能力,也无法运行 Hyper-V 隔离容器











