阿里云提供的 Windows Server 2022 with Containers 镜像(如 win2022-datacenter-core-with-containers 或 win2022-datacenter-with-containers)已预装 Windows 容器运行时支持(包括 containerd、Docker EE 兼容层及必要的内核功能),但默认不自动启动 Docker 服务,也不预装 docker.exe CLI 工具。你需要手动完成以下配置步骤来启用并使用 Docker(即 Windows Container 环境)。以下是完整、安全、推荐的配置流程:
✅ 前提确认(必做)
-
确认镜像版本
在 ECS 实例中运行:Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, OsArchitecture✅ 应显示:
Windows Server 2022 Datacenter+Version 21H2 (20348)或更高(如 22H2/23H2),且OsArchitecture = "64-bit"。 -
确认容器功能已启用(该镜像默认已启用):
Get-WindowsFeature Containers # 输出应为: Installed = True -
确认 Hyper-V(可选,仅限 Hyper-V 隔离模式)
Windows 容器支持两种隔离模式:process(轻量,默认,无需 Hyper-V)hyperv(更强隔离,需启用 Hyper-V)
若需
hyperv模式(例如运行 Linux 容器 via WSL2 不适用;Windows 容器用 hyperv 隔离需 Hyper-V):# 启用 Hyper-V(仅限 Gen2 实例 + 支持嵌套虚拟化的 CPU) Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All -NoRestart # ⚠️ 阿里云 ECS 默认不支持嵌套虚拟化(除部分神龙裸金属实例),故**强烈建议仅使用 process 隔离**
🛠 步骤 1:安装 Docker CLI(docker.exe)和管理服务
阿里云镜像未预装 Docker CLI,需手动安装官方 Docker Desktop for Windows 不适用(仅面向桌面版),而应使用 Docker Engine for Windows Server(即 dockerd + docker.exe)。
✅ 推荐方式:使用官方 Docker MSI 安装包(稳定、兼容)
✅ 适用于 Windows Server 2022,支持 process/hyperv 隔离,与阿里云内核兼容性最佳。
# 以管理员身份打开 PowerShell(右键 → “以管理员身份运行”)
# 1. 下载最新稳定版 Docker Engine for Windows Server(v24.x+ 推荐)
# 查看最新版本:https://docs.docker.com/engine/release-notes/
$version = "24.0.7" # 替换为当前最新 stable 版(如 24.0.9)
$url = "https://desktop.docker.com/win/main/amd64/$version/docker-$version.msi"
# 2. 下载并静默安装(自动注册服务、添加 PATH)
Invoke-WebRequest -Uri $url -OutFile "$env:TEMPdocker.msi"
Start-Process msiexec -ArgumentList "/i `"$env:TEMPdocker.msi`" /qn" -Wait
# 3. 刷新环境变量 & 验证
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
docker --version # 应输出类似:Docker version 24.0.7, build afdd758
💡 替代方案(免安装 CLI):直接下载
docker.exe(不推荐生产环境,无服务管理)Invoke-WebRequest -Uri "https://desktop.docker.com/win/main/amd64/24.0.7/docker-24.0.7.zip" -OutFile "$env:TEMPdocker.zip" Expand-Archive "$env:TEMPdocker.zip" -DestinationPath "$env:ProgramFilesDocker" $env:Path += ";$env:ProgramFilesDocker"
🛠 步骤 2:配置 Docker Daemon(关键!适配阿里云网络)
默认配置可能无法拉取镜像(因国内网络限制),需配置镜像提速器 + 进程隔离策略。
🔧 创建 daemon.json 配置文件
$configDir = "$env:ProgramDatadockerconfig"
mkdir -Force $configDir
$daemonJson = @{
"registry-mirrors" = @(
"https://<your-aliyun-acr-mirror>.mirror.aliyuncs.com", # ✅ 推荐:替换为你的阿里云 ACR 镜像提速器(控制台获取)
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
)
"exec-opts" = @("native.cgroupdriver=systemd") # Windows 忽略此选项,可删除;仅 Linux 有效
"log-driver" = "json-file"
"log-opts" = @{
"max-size" = "10m"
"max-file" = "3"
}
"windows-daemon" = @{
"lcow" = @{ "enabled" = "false" } # 禁用 LCOW(Linux Containers on Windows),已废弃
}
# ⚠️ 关键:强制使用 process 隔离(避免 hyperv 启动失败)
"default-isolation" = "process"
} | ConvertTo-Json -Depth 10
Set-Content -Path "$configDirdaemon.json" -Value $daemonJson -Encoding UTF8
✅ 如何获取阿里云 ACR 镜像提速器?
登录 阿里云容器镜像服务 ACR 控制台 → 左侧「镜像工具」→ 「镜像提速器」→ 复制形如 https://xxxxx.mirror.aliyuncs.com 的地址。
🛠 步骤 3:启动并设为开机自启
# 启动 Docker 服务
Start-Service docker
# 设为自动启动(推荐)
Set-Service docker -StartupType Automatic
# 验证服务状态
Get-Service docker | Select-Object Name, Status, StartType
# ✅ 应显示:Status=Running, StartType=Automatic
# 验证 Docker 引擎连通性
docker info | Select-Object -First 10
🧪 步骤 4:测试 Windows 容器(Hello World)
# 拉取官方 Windows Nano Server 镜像(体积小,适合测试)
docker pull mcr.microsoft.com/windows/nanoserver:ltsc2022
# 运行容器(process 隔离)
docker run --rm -it mcr.microsoft.com/windows/nanoserver:ltsc2022 cmd /c "echo Hello from Windows Container!"
# ✅ 成功输出即表示环境就绪
⚠️ 注意:
nanoserver:ltsc2022是 Windows Server 2022 对应的 Nano Server 镜像标签(非2022或latest)- 如遇
no matching manifest错误,请确认系统版本与镜像标签严格匹配(winver显示 20348.x → 用ltsc2022)
🔐 安全加固建议(生产环境必做)
| 项目 | 建议操作 |
|---|---|
| 防火墙 | 开放 2375(HTTP)或 2376(HTTPS)仅限内网访问(若需远程管理) |
| Docker TLS | 生产环境禁用 tcp:// 监听,或启用双向 TLS(参考 Docker docs) |
| 用户权限 | 将运维用户加入 docker-users 组:Add-LocalGroupMember -Group "docker-users" -Member "YourUser" |
| 磁盘空间 | Windows 容器默认使用 C:ProgramDatadocker,建议挂载数据盘并软链接:mklink /J "C:ProgramDatadocker" "D:docker" |
❌ 常见问题排查
| 现象 | 解决方案 |
|---|---|
docker: command not found |
检查是否以管理员运行 PowerShell;执行 $env:Path += ";$env:ProgramFilesDocker" 后重试 |
Error response from daemon: hcsshim::CreateComputeSystem failed |
检查 default-isolation 是否为 process;确认未启用 Hyper-V(除非明确需要 hyperv 隔离) |
pull access denied 或超时 |
检查 daemon.json 中 registry-mirrors 地址是否正确;尝试 ping mcr.microsoft.com 测试网络连通性 |
The service cannot be started |
查看日志:Get-EventLog -LogName Application -Source Docker -Newest 20;常见原因:端口冲突、配置语法错误(JSON 格式) |
✅ 总结:阿里云 Windows Server 2022 with Containers 配置要点
| 步骤 | 关键动作 |
|---|---|
| ✅ 镜像选择 | 使用阿里云官方 Windows Server 2022 with Containers 镜像(已含 Containers Feature) |
| ✅ 安装 Docker | 下载官方 docker-*.msi 安装(非 Docker Desktop) |
| ✅ 配置提速器 | daemon.json 中配置阿里云 ACR 镜像提速器 |
| ✅ 隔离模式 | 显式设置 "default-isolation": "process"(最稳定) |
| ✅ 启动服务 | Start-Service docker + Set-Service docker -StartupType Automatic |
| ✅ 验证运行 | docker run --rm mcr.microsoft.com/windows/nanoserver:ltsc2022 echo OK |
如需进一步支持(如:配置私有 Registry、集成阿里云 ACR、Docker Compose、Kubernetes on Windows),欢迎继续提问!🚀
阿里云最佳实践建议搭配 ACR 企业版 和 ACK@Edge 实现混合容器管理。
云小栈