在 Windows Server 2022 上运行 Docker 容器(尤其是原生 Windows 容器),需启用以下核心组件、服务和配置。注意:Windows Server 2022 原生支持 Windows 容器(基于 Hyper-V 或 Process 隔离),但不直接支持原生 Linux 容器(LCOW);若需运行 Linux 容器,必须通过 WSL2 + Docker Desktop(仅限桌面版)或 Docker Engine on WSL2(Server 场景受限) —— 但 Docker Desktop 不支持 Windows Server,因此生产环境推荐方案是:
✅ 首选方案:使用 Windows 容器(Windows Server Containers 或 Hyper-V Containers)
❌ 不推荐/不支持:在 Windows Server 2022 上直接安装 Docker Desktop(官方不支持)或原生 Linux 容器引擎。
✅ 一、必需的 Windows 功能(通过 PowerShell 启用)
以 管理员身份运行 PowerShell,执行以下命令:
# 1. 启用容器功能(核心)
Enable-WindowsOptionalFeature -Online -FeatureName containers -All -NoRestart
# 2. 启用 Hyper-V(仅当需 Hyper-V 隔离容器或嵌套虚拟化时必需;Process 隔离可选)
# 注意:Hyper-V 是 Windows Server 容器的隔离增强选项,且是运行 Linux 容器(通过 WSL2)的前提,
# 但 WSL2 在 Windows Server 2022 上需手动启用(见下文),且非生产推荐。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All -NoRestart
# 3. (可选但强烈推荐)启用 Windows Subsystem for Linux(WSL2 前提,仅当你计划通过 WSL2 运行 Linux 容器时需要)
# ⚠️ 注意:WSL2 在 Windows Server 2022 上受支持(自 2022 年 9 月更新起),但属于“实验性支持”,不适用于生产 Linux 容器负载。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux -NoRestart
# 4. (如启用 WSL2)还需启用虚拟机平台(VM Platform)
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart
🔁 执行后需重启服务器(
Restart-Computer)。
✅ 二、必需的服务与守护进程
| 服务 | 状态要求 | 说明 |
|---|---|---|
| Docker Engine(dockerd.exe) | ✅ 运行中(作为 Windows 服务) | 官方 Docker Engine for Windows(docker.io)或通过 Install-Module DockerMsftProvider 安装(已弃用)→ 推荐使用官方二进制或 Chocolatey。 |
| vmms (Virtual Machine Management Service) | ✅ 运行中(若启用 Hyper-V) | 支持 Hyper-V 隔离容器及 WSL2。 |
| LxssManager(Linux Subsystem Service) | ✅ 运行中(仅启用 WSL2 时) | WSL2 必需,但非 Windows 容器必需。 |
💡 提示:Windows 容器无需 WSL2 或 LxssManager;它们仅用于 Linux 容器场景(非标准 Server 生产路径)。
✅ 三、关键配置步骤
-
安装 Docker Engine(Windows 版)
# 方式1:使用官方二进制(推荐,稳定可控) # 下载最新 docker-24.x.x.zip(如 https://desktop.docker.com/win/stable/amd64/) # 解压到 C:Program FilesDocker,添加到 PATH,并注册为服务: .dockerd --register-service --data-root "C:ProgramDataDocker" Start-Service docker # 方式2:使用 Chocolatey(需先安装 choco) choco install docker-engine -
配置 Docker Daemon(
daemon.json)
路径:C:ProgramDataDockerconfigdaemon.json
示例(启用 Windows 容器 + 默认隔离模式):{ "exec-opts": ["native.cgroupdriver=systemd"], "hosts": ["tcp://0.0.0.0:2375", "npipe://"], "insecure-registries": [], "registry-mirrors": [], "experimental": false, "default-isolation": "process", // 或 "hyperv"(需 Hyper-V) "lcow": { "enabled": false } // 显式禁用 LCOW(Linux Containers on Windows),已废弃 }⚠️
lcow已被弃用(Docker 20.10+ 移除),不要启用。 -
验证 Windows 容器运行时
# 切换到 Windows 容器模式(必须!) & 'C:Program FilesDockerdockerd.exe' --unregister-service & 'C:Program FilesDockerdockerd.exe' --register-service --containerd='C:Program FilesDockercontainerdcontainerd.exe' Restart-Service docker # 拉取并运行 Windows 容器测试镜像 docker pull mcr.microsoft.com/windows/servercore:ltsc2022 docker run --rm -it mcr.microsoft.com/windows/servercore:ltsc2022 cmd /c "echo Hello from Windows Container!"
✅ 四、网络与存储(生产必备)
| 组件 | 要求 | 说明 |
|---|---|---|
| HNS(Host Network Service) | ✅ 自动启用(容器功能启用后即就绪) | Windows 容器网络基础(docker network ls 依赖)。 |
| Containerd(推荐) | ✅ Docker Engine v20.10+ 默认集成 containerd | 更稳定,替代旧版 dockerd 内置的 containerd-shim。 |
| 存储驱动 | 推荐 windowsfilter(默认)或 wsl(仅 WSL2 场景) |
windowsfilter 是 Windows 容器标准驱动;wsl 仅用于 WSL2 后端(不适用于 Server)。 |
❌ 不支持/不推荐的操作
| 项目 | 原因 |
|---|---|
| Docker Desktop for Windows Server | ❌ 官方明确不支持(仅限 Windows 10/11 Pro/Enterprise)。 |
| 原生 Linux 容器(无 WSL2/Hyper-V) | ❌ Windows Server 容器运行时无法运行 Linux 内核镜像。 |
| LCOW(Linux Containers on Windows) | ❌ 自 Docker Engine 20.10 起彻底移除,不再维护。 |
| Docker Toolbox | ❌ 已废弃,不兼容 Windows Server 2022。 |
✅ 最佳实践总结(生产环境)
| 项目 | 推荐配置 |
|---|---|
| 容器类型 | Windows Server Containers(--isolation=process)或 Hyper-V Containers(--isolation=hyperv) |
| 基础镜像 | mcr.microsoft.com/windows/servercore:ltsc2022 或 nanoserver:ltsc2022 |
| 管理工具 | Docker CLI + PowerShell + Windows Admin Center(含容器扩展) |
| 安全加固 | 启用 gMSA(组托管服务帐户)、限制容器特权、使用 --read-only、禁用 --privileged |
| 日志与监控 | 配置 json-file 日志驱动 + Windows Event Log / Azure Monitor / Grafana+Prometheus(通过 cAdvisor for Windows) |
如需运行 Linux 容器,生产级建议方案是:
➡️ 在独立 Linux VM 或 Kubernetes 集群(如 AKS、Rancher、OpenShift)中运行,而非在 Windows Server 上模拟。
需要我为你提供:
- ✅ 完整的 PowerShell 自动化部署脚本?
- ✅
daemon.json高可用/安全加固模板? - ✅ Windows 容器 CI/CD(GitHub Actions / Azure Pipelines)示例?
- ✅ gMSA 配置详细步骤?
欢迎随时提出 👍
云知识CLOUD