在 Windows Server 2019 上运行 Linux 容器是完全可行的,但需要注意:Windows Server 2019 默认只支持“Windows 容器”。要运行 Linux 容器,必须启用 WSL 2 (Windows Subsystem for Linux 2) 或 Hyper-V 模式下的 Linux 兼容性支持。
以下是两种主流方案的详细步骤和对比:
方案一:使用 WSL 2 + Docker Desktop(推荐,轻量高效)
这是目前最流行、性能最好的方式。WSL 2 允许在 Windows 内部运行一个真实的 Linux 内核,Docker Desktop 会利用这个内核来运行 Linux 容器。
前置条件
- 操作系统版本:Windows Server 2019 需要安装 Update KB4578963 或更高版本(确保支持 WSL 2)。
- 虚拟化支持:BIOS/UEFI 中需开启虚拟化技术(VT-x/AMD-V)。
- 管理员权限:所有操作需在管理员命令行或 PowerShell 中执行。
部署步骤
1. 启用 WSL 2 功能
以管理员身份打开 PowerShell,依次运行以下命令:
# 启用 WSL 和虚拟机平台功能
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 重启服务器(必须重启才能生效)
Restart-Computer
2. 安装并设置 WSL 2 发行版
重启后,再次以管理员身份运行 PowerShell,下载并安装 Ubuntu(或其他 Linux 发行版)作为后端:
# 设置默认版本为 WSL 2
wsl --set-default-version 2
# 从 Microsoft Store 安装 Ubuntu(如果无法访问商店,可手动下载 .appx 包)
# 或者使用命令行安装(需先下载 ubuntu-20.04.appx 等文件)
# 这里假设你已安装 Ubuntu,直接初始化:
wsl -l -v # 查看状态
注意:如果是纯服务器环境没有图形界面,可能需要通过 .zip 包或 winget 安装 Ubuntu。
3. 安装 Docker Desktop for Windows
- 下载 Docker Desktop 安装包。
- 安装过程中,务必勾选 "Use WSL 2 instead of Hyper-V"。
- 安装完成后启动 Docker Desktop,它会自动配置 WSL 2 后端。
4. 验证并运行 Linux 容器
打开新的 PowerShell 窗口(无需进入 WSL 子系统),直接运行:
docker run --rm hello-world
如果看到欢迎信息,说明基础环境正常。现在可以运行标准的 Linux 服务了,例如 Nginx:
docker run -d -p 8080:80 nginx:alpine
访问 http://localhost:8080 即可看到页面。
方案二:使用 Hyper-V 原生 Linux 容器(传统方式,较复杂)
如果你无法使用 WSL 2(例如某些旧版更新或特殊安全策略),可以使用 Hyper-V 隔离的 Linux 容器模式。这种方式资源开销稍大,且配置较为繁琐。
部署步骤
- 启用 Hyper-V 角色:
Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart - 安装 Docker Engine (非 Desktop):
Windows Server 通常不直接提供 Docker Desktop 的安装包(它是面向桌面的)。你需要下载 Docker Engine for Windows 的 MSI 包。
注意:较新版本的 Docker Engine 对 Windows Server 2019 的 Linux 容器支持可能受限,建议优先尝试方案一。 - 配置 Docker 守护进程:
编辑C:ProgramDatadockerconfigdaemon.json,添加以下内容以强制使用 Linux 模式:{ "default-runtime": "runc", "runtimes": { "runc": { "path": "docker-runc" } }, "exec-opts": ["native.cgroupdriver=cgroupfs"] }(注:此配置在不同 Docker 版本中差异较大,极易出错,故不推荐生产环境首选)
关键注意事项与最佳实践
| 特性 | WSL 2 方案 (推荐) | Hyper-V 方案 |
|---|---|---|
| 性能 | 接近原生 Linux,启动快 | 较慢,启动需完整 VM |
| 网络 | NAT 模式,端口映射简单 | 虚拟交换机,配置复杂 |
| 文件系统 | 跨系统访问方便 (\wsl$) |
需挂载共享文件夹 |
| 适用场景 | 开发、测试、一般生产 | 特定遗留系统需求 |
| 维护难度 | 低 | 高 |
常见问题排查
- 端口冲突:Windows 宿主机和容器端口不能重复。确保
docker run -p 8080:80中的8080未被其他服务占用。 - 持久化数据:Linux 容器内的数据默认是易失的。务必使用 Volume 挂载:
docker run -d -p 8080:80 -v C:data/nginx:/usr/share/nginx/html nginx - 防火墙:Windows Server 防火墙可能会阻止外部访问容器的端口。需要在“高级安全 Windows Defender 防火墙”中添加入站规则,允许对应端口(如 8080)。
- DNS 解析:如果容器内无法解析域名,可在
daemon.json中配置 DNS:{ "dns": ["8.8.8.8", "8.8.4.4"] }
结论
对于 Windows Server 2019,强烈建议使用 WSL 2 + Docker Desktop 方案。它不仅配置简单,而且能完美解决 Linux 容器在内核层面的兼容性问题,同时保持了良好的性能和易用性。除非有特殊的合规要求禁止使用 WSL,否则无需考虑传统的 Hyper-V Linux 容器模式。
云知识CLOUD