在 Windows Server 2022 上安装 Docker,首先需要明确一个核心前提:Windows Server 2022 原生仅支持“容器化”模式(Windows Containers),不支持 Linux 容器。
如果你需要运行 Linux 容器(如大多数开源项目、Kubernetes 环境等),必须安装 Hyper-V 并配置 WSL 2 或虚拟机。如果你只是部署 .NET Framework/ASP.NET Core 应用,则直接使用 Windows 容器即可。
以下是两种场景的安装步骤:
场景一:安装 Windows 容器(推荐用于 .NET 应用)
这是最轻量级的方案,直接利用 Windows Server 的 Hyper-V 功能,无需额外虚拟化层。
1. 启用必要的功能
打开 PowerShell(以管理员身份运行),执行以下命令启用容器和 Hyper-V 相关功能:
# 启用容器功能
Install-WindowsFeature -Name Containers -IncludeManagementTools
# 启用 Hyper-V (如果尚未安装)
Install-WindowsFeature -Name Hyper-V -IncludeAllSubFeature -IncludeManagementTools -Restart
注意:执行完上述命令后,系统会提示重启,请根据业务情况安排重启时间。
2. 安装 Docker Desktop for Windows
Docker 官方不再提供独立的 MSI 安装包,推荐使用 Docker Desktop。
- 下载最新版本的
Docker Desktop(Windows Installer)。- 下载地址:https://www.docker.com/products/docker-desktop
- 重要:确保选择支持 Windows Server 的版本(通常 Docker Desktop 4.x+ 已支持 Server 2022)。
- 运行安装程序。
- 在安装向导中,务必勾选 "Use Windows containers instead of Linux containers"(使用 Windows 容器)。
- 如果此时没有看到该选项,说明你的服务器未正确开启 Hyper-V 或版本不兼容,需检查步骤 1。
- 完成安装并重启电脑。
3. 验证安装
重启后,打开 PowerShell,输入:
docker --version
docker run hello-world
如果显示 hello-world 镜像拉取成功并打印欢迎信息,则安装完毕。
场景二:安装 Linux 容器(需 WSL 2 或 Hyper-V 虚拟机)
由于 Windows Server 2022 默认内核不支持 Linux 二进制文件,你需要通过 WSL 2 (Windows Subsystem for Linux) 来运行 Linux 容器。
1. 启用 WSL 2 和虚拟平台
以管理员身份运行 PowerShell:
# 启用 WSL 功能
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# 启用虚拟机平台 (Virtual Machine Platform)
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 设置默认版本为 WSL 2
wsl --set-default-version 2
# 重启服务器
Restart-Computer
2. 安装 Linux 发行版
- 打开 Microsoft Store(商店),搜索并安装一个 Linux 发行版(如 Ubuntu 22.04 LTS)。
- 首次启动时,按照提示创建用户名和密码。
3. 安装 Docker Engine inside WSL 2
进入刚安装的 Ubuntu 终端:
# 更新包列表
sudo apt update
# 安装依赖
sudo apt install -y ca-certificates curl gnupg lsb-release
# 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置仓库
echo
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4. 配置 Docker 以便从 Windows 调用
为了让 Windows 的命令行也能使用 Linux 容器,需要将 Docker 守护进程暴露出来。
在 Ubuntu 终端中编辑 /etc/docker/daemon.json:
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}
注意:生产环境中开放 TCP 端口存在安全风险,建议配合 SSH 隧道或防火墙策略使用。
重启 Docker 服务:
sudo systemctl restart docker
最后,在 Windows PowerShell 中安装 Docker CLI(如果还没装):
winget install Docker.DockerDesktop
# 或者手动下载 Windows 版的 Docker CLI
然后测试连接:
$env:DOCKER_HOST="tcp://localhost:2375"
docker ps
如果能看到输出,说明已成功连接到 WSL 2 中的 Linux Docker 引擎。
常见问题与注意事项
-
版本兼容性:
- Windows Server 2022 的核心版本较新,请确保使用的 Docker Desktop 版本至少为 4.20+ 以获得最佳兼容性。
- 旧版 Docker CE 可能无法在 Server 2022 上正常运行,建议优先使用 Docker Desktop 或最新的 Docker Engine for Windows。
-
资源限制:
- Windows 容器共享宿主机内核,性能损耗极低,但内存占用较小。
- Linux 容器(通过 WSL 2)需要分配固定的内存给 WSL 子系统(可通过
.wslconfig文件调整),否则可能导致宿主机内存不足。
-
网络问题:
- 如果使用 Windows 容器,默认网络模式是 NAT,外部访问可能需要配置端口映射 (
-p) 或 Overlay 网络。 - 如果使用 WSL 2,默认情况下 WSL 2 的 IP 地址可能会随重启变化,建议在脚本中使用动态获取 IP 或绑定到特定网卡。
- 如果使用 Windows 容器,默认网络模式是 NAT,外部访问可能需要配置端口映射 (
总结建议:
- 如果是 .NET 应用 -> 直接按 场景一 安装 Windows 容器。
- 如果是 Java, Python, Node.js, Go 等通用应用 -> 请按 场景二 配置 WSL 2 + Linux 容器。
云计算