在 Windows Server 2022 上运行 Docker 容器(尤其是原生 Windows 容器),需启用以下核心组件、服务和配置。注意:Windows Server 2022 原生支持 Windows 容器(基于 containerd 和 hcs),但不直接支持 Linux 容器(LCOW);如需运行 Linux 容器,必须启用 WSL2 后端(仅限 Windows Server 2022 预览版/Insider Build 或特定更新后的正式版,且生产环境不推荐),或使用 Docker Desktop for Windows(仅限桌面系统,不支持 Server) —— 因此,标准生产场景下,Windows Server 2022 仅推荐运行 Windows 容器。
以下是启用 Windows 容器所必需的核心组件和服务:
✅ 一、必需的 Windows 功能(通过 PowerShell 启用)
以 管理员身份运行 PowerShell,执行:
# 1. 启用容器功能(核心)
Enable-WindowsOptionalFeature -Online -FeatureName containers -All -NoRestart
# 2. 启用 Hyper-V(Windows 容器依赖 Hyper-V 隔离模式;即使使用 process 隔离,也建议启用以支持完整功能)
# 注意:Hyper-V 在物理服务器上需 BIOS 中启用虚拟化(Intel VT-x / AMD-V)和 SLAT
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All -NoRestart
# 3. (可选但强烈推荐)启用虚拟机平台(为未来兼容性及 WSL2/容器增强隔离做准备)
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -All -NoRestart
⚠️ 注意:
containers是基础容器运行时支持(含hcsshim、hcs等)。Microsoft-Hyper-V不是绝对强制(process-isolated 容器可不依赖),但 production 环境强烈推荐启用,以支持更安全的 Hyper-V 隔离(--isolation=hyperv)和多租户场景。- 所有启用后需 重启服务器。
✅ 二、必需的服务(自动启动)
以下服务由 Windows 容器功能自动安装并设为自启(无需手动配置,但需确认状态):
| 服务名称 | 显示名称 | 说明 |
|---|---|---|
vmms |
Hyper-V Virtual Machine Management | Hyper-V 管理服务(启用 Hyper-V 后必需) |
hns |
Host Network Service | 提供容器网络(vSwitch、NAT、Overlay 等) |
vmcompute |
Hyper-V Compute Service | 容器运行时计算引擎(HCS 的核心服务) |
docker |
Docker Engine(若安装 Docker CE) | 注意:Docker CE 不再官方支持 Windows Server 2022(自 Docker 20.10.19+ 起已弃用 Windows Server 支持) |
🔴 关键更新(2023 年起重大变更):
Docker Inc. 已于 2023 年正式终止对 Windows Server 的 Docker Engine(dockerd)支持。
✅ 替代方案:使用 Microsoft 原生容器运行时containerd+ctr/crictl,或通过 Kubernetes(如 AKS-HCI、Kubernetes on Windows)管理容器。
✅ 生产推荐路径:使用containerd直接运行 Windows 容器(微软官方支持,集成于 Windows Server 2022)
✅ 三、必需的运行时与工具(手动安装)
1. 安装 containerd(推荐方式)
Windows Server 2022 自带 containerd(位于 C:Program Filescontainerd),但需配置并启动:
# 初始化 containerd(首次运行)
C:Program Filescontainerdcontainerd.exe --register-service
Start-Service containerd
# 验证
ctr version # 应返回 containerd 版本(如 v1.7.x)
✅
containerd是 CNCF 毕业项目,Windows Server 2022 内置支持,是当前 Microsoft 推荐的生产级容器运行时。
2. 安装 CNI 插件(用于网络)
Windows 容器默认使用内置 HNS(Host Network Service),但若需高级网络(如 Calico、Cilium),需部署对应 CNI 插件(需适配 Windows)。
3. 拉取 Windows 基础镜像(必需)
# 使用 ctr 拉取(示例:Windows Server Core 2022)
ctr -n k8s.io image pull mcr.microsoft.com/windows/servercore:ltsc2022
# 或使用 docker(仅当仍安装 Docker CE 时,不推荐)
# docker pull mcr.microsoft.com/windows/servercore:ltsc2022
📌 镜像源:所有官方 Windows 镜像均托管于 MCR(Microsoft Container Registry):
mcr.microsoft.com/...
✅ 四、关键系统配置要求
| 项目 | 要求 | 验证命令 |
|---|---|---|
| 操作系统版本 | Windows Server 2022(Build 20348+),建议最新 LTSC 更新 | winver 或 (Get-ComputerInfo).WindowsBuildLabEx |
| 内核隔离支持 | BIOS 中启用:Intel VT-x / AMD-V + SLAT(Nested Paging) | systeminfo | findstr "Hyper-V Requirements" |
| 存储驱动 | 默认使用 windowsfilter(推荐);不支持 overlay2(Linux 专用) |
— |
| 容器存储位置 | 默认 %ProgramData%docker(若使用 containerd,则为 %ProgramData%containerd) |
— |
| 防火墙规则 | 若需容器端口映射,需开放对应入站规则(如 NAT 网络) | Get-NetFirewallRule -DisplayName "*container*" |
❌ 不再支持/不推荐的组件
| 组件 | 状态 | 说明 |
|---|---|---|
Docker Engine (dockerd.exe) |
⚠️ 已弃用 | Docker Inc. 自 2023 年起停止 Windows Server 支持;社区无维护;存在安全风险 |
| Docker Desktop | ❌ 不支持 | 仅限 Windows 10/11 Pro/Enterprise 桌面版,不可安装于 Windows Server |
| LCOW(Linux Containers on Windows) | ❌ 已移除 | Windows Server 2022 不支持;仅旧版 Windows 10/Server 2019 试验性支持 |
| Windows Subsystem for Linux (WSL1) | ❌ 无关 | WSL1 不提供容器支持;WSL2 仅适用于桌面系统 |
✅ 推荐生产架构(Windows Server 2022)
graph LR
A[Windows Server 2022] --> B[Hyper-V + Containers Feature]
B --> C[containerd 运行时]
C --> D[HNS 网络服务]
D --> E[Windows 容器<br>(servercore/nanoserver)]
C --> F[Kubernetes(如 AKS-HCI 或 kubeadm)]
✅ 最佳实践组合:
- 运行时:
containerd(内置,稳定,受微软支持) - 编排:Kubernetes(使用
kubeadm或 AKS-HCI) - 镜像:MCR (
mcr.microsoft.com/windows/...) - 隔离:
--isolation=process(轻量)或--isolation=hyperv(安全)
✅ 快速验证脚本(PowerShell)
# 检查功能是否启用
"Containers:" + (Get-WindowsOptionalFeature -Online -FeatureName containers).State
"Hyper-V:" + (Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V).State
# 检查服务状态
Get-Service vmms, hns, vmcompute, containerd | Select Name, Status, StartType
# 检查 containerd 是否就绪
if (Get-Command ctr -ErrorAction SilentlyContinue) { ctr version } else { Write-Warning "ctr not found" }
# 尝试运行一个测试容器(需先拉取镜像)
# ctr -n default run --rm -t mcr.microsoft.com/windows/nanoserver:ltsc2022 test-ping ping -n 1 127.0.0.1
如需进一步帮助,例如:
- 配置
containerd的config.toml(启用镜像仓库、X_X、registry mirrors) - 在 Kubernetes 中添加 Windows Node
- 构建/推送 Windows 容器镜像(使用
docker buildx或kaniko) - 设置 Windows 容器 CI/CD(GitHub Actions / Azure Pipelines)
欢迎随时提出,我可以提供详细配置示例 👍
✅ 总结一句话:
Windows Server 2022 运行容器 = 启用 containers + Hyper-V 功能 → 重启 → 使用内置 containerd 运行 Windows 容器(非 Docker Engine),这是当前唯一受支持、安全、生产就绪的路径。
CLOUD云枢