在 Windows Server 2022 上运行 Docker 容器(特别是原生 Windows 容器),需启用以下核心组件、服务和配置。注意:Windows Server 2022 原生支持 Windows 容器(基于 process 或 hyperv 隔离),但不原生支持 Linux 容器(LCOW);如需运行 Linux 容器,必须通过 WSL2 + Docker Desktop(仅限桌面版,不适用于 Server) 或 Docker Engine on WSL2(非官方/受限场景) —— 但Windows Server 2022 官方生产推荐方案是运行 Windows 容器。
以下是为在 Windows Server 2022 上安全、稳定运行 Windows 容器(Docker Engine)所必需启用的核心项:
✅ 一、必备 Windows 功能(通过 PowerShell 启用)
以管理员身份运行 PowerShell,执行:
# 1. 启用容器功能(核心)
Enable-WindowsOptionalFeature -Online -FeatureName containers -All -NoRestart
# 2. 启用 Hyper-V(仅当使用 hyperv 隔离模式时必需;process 隔离可选,但强烈推荐启用以支持更安全的隔离)
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All -NoRestart
# 3. (可选但推荐)启用 Windows Subsystem for Linux(仅当后续需 WSL2 辅助调试或混合场景;非 Docker Engine 必需)
# Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux -All -NoRestart
⚠️ 注意:
containers功能是绝对必需的,提供容器运行时基础(如containerd支持)。Microsoft-Hyper-V是启用hyperv隔离模式的前提(推荐用于生产环境,提供更强进程/网络隔离);若仅使用process隔离(轻量、性能略高),理论上可不启用 Hyper-V,但微软强烈建议启用(尤其在多租户/安全敏感场景),且某些镜像(如 Server Core 2022)默认要求hyperv隔离。- 重启服务器(
Restart-Computer)在启用后是必需的。
✅ 二、安装并配置 Docker Engine(Moby)
Windows Server 2022 不内置 Docker,需手动安装 Docker Engine(由 Moby 项目提供):
方法(推荐):使用官方 Docker-Moby 安装脚本
# 以管理员身份运行
Invoke-WebRequest "https://raw.githubusercontent.com/moby/moby/master/contrib/install.ps1" -UseBasicParsing | Invoke-Expression
该脚本会:
- 下载最新稳定版
dockerd.exe和docker.exe(Moby 引擎) - 安装为 Windows 服务(
Docker服务) - 配置默认
daemon.json(位于C:ProgramDatadockerconfigdaemon.json)
✅ 安装后验证:
Get-Service docker # 状态应为 Running
docker version # 显示 client/server 版本(server 应为 windows)
docker info # 查看 Isolation: "process" 或 "hyperv"
✅ 三、关键服务与依赖
| 服务名称 | 是否必需 | 说明 |
|---|---|---|
Docker (dockerd) |
✅ 必需 | Docker 引擎主服务(Windows 服务名:Docker) |
| vmms (Virtual Machine Management Service) | ✅(若启用 hyperv 隔离) |
Hyper-V 管理服务,dockerd 启动 hyperv 隔离容器时依赖 |
| WinNAT | ✅ 必需 | Windows Network Address Translation 服务,为容器提供 NAT 网络(docker0 网桥依赖) |
| WdNisSvc(Windows Defender Antivirus Service) | ⚠️ 推荐启用(非强制) | 防病毒扫描可能影响镜像拉取/构建速度,但禁用会降低安全性;建议配置排除路径(如 C:ProgramDatadocker) |
🔍 检查服务状态:
Get-Service docker, vmms, WinNAT | Select-Object Name, Status, StartType
✅ 四、必要系统配置与权限
-
用户权限
- 运行
dockerCLI 的账户需属于docker-users本地组(安装脚本自动创建):Add-LocalGroupMember -Group "docker-users" -Member "DOMAINUsername" - 或直接以 Administrators 组成员身份运行(开发测试可接受,生产环境不推荐)。
- 运行
-
防火墙配置
- 默认无需开放额外端口(Docker 内部通信走命名管道
//./pipe/docker_engine); - 若启用 Docker Engine 的 TCP Socket(不推荐生产环境),需放行对应端口(如
2375/2376),并严格限制访问源。
- 默认无需开放额外端口(Docker 内部通信走命名管道
-
存储驱动(Storage Driver)
- Windows Server 2022 默认使用
windowsfilter(推荐,性能好、兼容性强); - 可在
daemon.json中显式指定(非必需):{ "storage-driver": "windowsfilter" }
- Windows Server 2022 默认使用
-
DNS 与网络
- 确保服务器能解析公网域名(如
mcr.microsoft.com),用于拉取镜像; - 建议配置可靠 DNS(如
8.8.8.8或企业 DNS),避免因 DNS 失败导致docker pull超时。
- 确保服务器能解析公网域名(如
❌ 不推荐/不支持的配置(常见误区)
- ❌ 在 Windows Server 上安装 Docker Desktop:Docker Desktop 仅支持 Windows 10/11 Pro/Enterprise,不支持任何 Windows Server 版本(包括 2022)。
- ❌ 尝试在 Server 2022 上原生运行 Linux 容器(LCOW):自 Docker Engine 20.10+ 已正式弃用 LCOW,且 Windows Server 2022 无 WSL2 内核集成(WSL2 仅限桌面版 Windows)。
- ❌ 禁用
WinNAT或vmms:将导致容器网络失败或hyperv隔离不可用。
✅ 快速验证清单(部署后必做)
# 1. 重启后检查服务
Get-Service docker | Where-Object Status -eq 'Running'
# 2. 运行 Hello World(Windows 容器)
docker run --rm mcr.microsoft.com/windows/nanoserver:ltsc2022 cmd /c "echo Hello from Windows Container!"
# 3. 检查隔离模式(推荐使用 hyperv)
docker info | findstr "Isolation"
# 输出应为:Isolation: hyperv (或 process)
# 4. 检查镜像拉取是否正常
docker pull mcr.microsoft.com/windows/servercore:ltsc2022
📌 总结:最小必需启用项
| 类别 | 项目 | 是否必需 |
|---|---|---|
| Windows 功能 | containers |
✅ |
Microsoft-Hyper-V |
✅(生产推荐;hyperv 隔离必需) |
|
| Windows 服务 | Docker(dockerd) |
✅ |
WinNAT |
✅ | |
vmms(若用 hyperv) |
✅ | |
| 用户组 | docker-users 成员 |
✅(或 Administrators) |
| 网络 | 可达 mcr.microsoft.com + 可靠 DNS |
✅ |
✅ 完成以上配置后,即可在 Windows Server 2022 上安全、高效地运行 Windows 容器(支持 IIS、.NET Framework/.NET Core、SQL Server Express 等 Windows 工作负载)。
如需进一步优化(如镜像缓存、CI/CD 集成、Kubernetes(AKS-Engine 或 MicroK8s)或安全加固(gMSA、TPM 支持)),可继续深入配置。欢迎提出具体场景需求 👍
CLOUD技术博