windows - 在Docker容器中运行Windows系统,适用于跨平台测试和自动化任务
想象一下这样的场景:你是一个Linux开发者,但需要测试一个只能在Windows上运行的应用程序;或者你需要运行一个Windows专用的自动化脚本,却不想安装完整的虚拟机;又或者你想在CI/CD流水线中加入Windows环境的测试,但不想维护昂贵的物理机或云实例。
如果能在Docker容器中运行Windows系统,这些问题就能迎刃而解。dockur/windows正是这样一个神奇的项目,它让你可以在Docker容器中运行完整的Windows操作系统。无论是Windows 10、Windows 11,还是Windows Server,都可以通过一条Docker命令在Linux服务器上启动,并通过浏览器远程访问。
项目基本信息
| 信息项 | 详情 |
|---|---|
| 项目名称 | windows |
| GitHub地址 | https://github.com/dockur/windows |
| 项目描述 | Windows inside a Docker container. |
| 作者 | dockur |
| 开源协议 | MIT License |
| Stars | 50758 |
| Forks | 4165 |
| 支持平台 | Linux |
| 最后更新 | 2026-03-29 |
一、项目介绍
dockur/windows是一个开创性的开源项目,它实现了在Docker容器中运行Windows操作系统的能力。这个项目的出现,打破了人们对Docker只能运行Linux容器的固有认知。
这个项目的工作原理并非简单地在容器中运行Windows内核(这几乎不可能),而是巧妙地利用了KVM(Kernel-based Virtual Machine)硬件虚拟化技术。具体来说:
- 容器内部运行了一个轻量级的QEMU虚拟机,负责模拟硬件环境
- QEMU利用宿主机的KVM模块,实现接近原生性能的虚拟化
- 通过Web界面(noVNC)或RDP协议,用户可以远程访问Windows桌面
- 容器启动时会自动下载Windows镜像并进行安装
这意味着你可以在任何支持KVM的Linux服务器上,以容器的方式运行Windows系统。整个过程是自动化的,无需手动干预安装步骤。
dockur/windows支持多种Windows版本,包括:
- Windows 10 (Pro, Enterprise)
- Windows 11 (Pro, Enterprise)
- Windows Server 2022
- Windows Server 2019
以及可选的语言版本和系统架构(x86_64和ARM64)。
二、核心优势
dockur/windows相比传统的虚拟机方案,具有以下显著优势:
- 容器化部署:以Docker容器的方式运行,享受容器化的便利性。一条命令即可启动,停止和删除都非常干净,不会在宿主机上留下残留文件。
- 自动安装:首次启动时自动完成Windows安装,无需手动点击“下一步”或填写配置。所有安装步骤都通过自动化脚本完成,等待片刻即可获得一个可用的Windows环境。
- 轻量级资源占用:相比完整的虚拟机管理程序(如VirtualBox或VMware),dockur/windows的资源占用更加可控。容器启动时只加载必要的组件,空闲时CPU占用极低。
- 远程访问便捷:内置了Web访问方式(通过noVNC),无需安装RDP客户端,打开浏览器即可操作Windows桌面。同时也支持标准的RDP协议,可以用远程桌面客户端连接。
- 持久化存储:通过Docker卷,可以将Windows系统盘和数据盘持久化到宿主机,容器重启或更新后数据不会丢失。
- 配置灵活:通过环境变量可以轻松调整Windows版本、语言、内存大小、CPU核心数、磁盘空间等参数,无需修改复杂的配置文件。
- 社区活跃:项目拥有超过5万颗星,社区非常活跃。问题反馈及时,新版本不断更新,支持最新的Windows更新和功能。
三、适用场景
dockur/windows在众多场景下都能发挥价值:
- 跨平台开发和测试:如果你在Linux或macOS上开发,但需要测试应用在Windows环境下的行为,dockur/windows提供了一个快速、轻量的测试环境。无需安装虚拟机软件或购买Windows电脑。
- Windows自动化任务:某些自动化脚本或工具(如PowerShell脚本、Windows批处理)只能在Windows上运行。通过dockur/windows,你可以在Linux服务器上运行这些任务,并将它们集成到自动化流水线中。
- CI/CD测试环境:在持续集成流水线中,你可能需要在Windows环境下运行测试。dockur/windows可以作为一个容器化测试环境,与GitLab CI、GitHub Actions等集成,实现Windows测试的自动化。
- 临时Windows环境:当你需要一个临时的Windows系统来完成某个特定任务(如运行某个只支持Windows的软件、打开特定的文件格式)时,dockur/windows提供了随用随起的便利性。
- 教育和培训:在培训场景中,需要为每个学员提供独立的Windows实验环境。通过dockur/windows,可以在服务器上为每个学员启动一个容器,既隔离又节省资源。
- 软件演示:如果你需要向客户演示只能在Windows上运行的软件,dockur/windows可以快速搭建演示环境,并通过Web链接分享访问入口。
四、安装教程
系统要求
| 工具 | 用途 | 下载/安装方式 |
|---|---|---|
| Docker | 容器运行环境 | [https://docs.docker.com/get-docker/] |
| KVM | 硬件虚拟化支持 | Linux内核自带,需确认开启 |
| CPU | 支持硬件虚拟化 | Intel VT-x 或 AMD-V |
检查KVM支持
在安装之前,确认宿主机支持KVM虚拟化:
# 检查CPU是否支持虚拟化
egrep -c '(vmx|svm)' /proc/cpuinfo
# 如果输出大于0,表示支持
# 检查KVM模块是否加载
lsmod | grep kvm
# 应该看到kvm_intel或kvm_amd如果KVM模块没有加载,可能需要安装:
# Ubuntu/Debian
sudo apt install qemu-kvm libvirt-daemon-system
# CentOS/RHEL
sudo yum install qemu-kvm libvirt快速启动
最简单的启动方式,运行以下命令:
docker run -it \
--name windows \
--device /dev/kvm \
-p 8006:8006 \
-p 3389:3389/tcp \
-p 3389:3389/udp \
-v /path/to/storage:/storage \
-e VERSION="win11" \
dockurr/windows参数说明:
--device /dev/kvm:将KVM设备挂载到容器,这是硬件加速的关键。-p 8006:8006:映射Web访问端口(noVNC)。-p 3389:3389/tcp -p 3389:3389/udp:映射RDP端口。-v /path/to/storage:/storage:持久化存储,Windows系统盘和数据将保存在此目录。-e VERSION="win11":指定Windows版本,可选值:win10、win11、win2022、win2019。
使用Docker Compose(推荐)
创建docker-compose.yml文件:
version: '3.8'
services:
windows:
image: dockurr/windows:latest
container_name: windows
restart: unless-stopped
devices:
- /dev/kvm
ports:
- "8006:8006"
- "3389:3389/tcp"
- "3389:3389/udp"
volumes:
- ./storage:/storage
environment:
VERSION: "win11"
RAM_SIZE: "4G"
CPU_CORES: "2"
DISK_SIZE: "64G"启动:
docker-compose up -d访问Windows
启动后,等待几分钟让Windows完成自动安装。然后通过以下方式访问:
- Web浏览器:访问
http://你的服务器IP:8006,使用内置的noVNC客户端操作。 - RDP客户端:使用远程桌面客户端连接
你的服务器IP:3389,用户名通常为administrator,密码在启动日志中会显示。
首次启动过程
首次启动时,容器会:
- 下载指定的Windows镜像(如果本地没有缓存)
- 创建虚拟磁盘
- 启动QEMU虚拟机
- 自动执行Windows安装(无人值守安装)
- 安装完成后等待用户连接
这个过程可能需要10-30分钟,取决于网络速度和硬件性能。可以通过docker logs windows查看安装进度。
五、使用示例
示例1:启动Windows 11并配置资源
创建一个Windows 11容器,分配8GB内存和4个CPU核心:
docker run -d \
--name win11 \
--device /dev/kvm \
-p 8080:8006 \
-p 3389:3389/tcp \
-p 3389:3389/udp \
-v ./win11-storage:/storage \
-e VERSION="win11" \
-e RAM_SIZE="8G" \
-e CPU_CORES="4" \
-e DISK_SIZE="128G" \
dockurr/windows示例2:运行Windows Server 2022用于CI测试
在CI流水线中启动Windows Server容器,执行测试后自动清理:
# 启动容器
docker run -d \
--name win-test \
--device /dev/kvm \
-p 8006:8006 \
-v ./test-storage:/storage \
-e VERSION="win2022" \
-e RAM_SIZE="4G" \
dockurr/windows
# 等待Windows启动(这里需要等待一段时间)
sleep 300
# 执行测试命令(通过PowerShell)
docker exec win-test powershell -Command "C:\tests\run-tests.ps1"
# 测试完成后清理
docker stop win-test
docker rm win-test示例3:中文版Windows
设置语言为简体中文:
docker run -d \
--name win-zh \
--device /dev/kvm \
-p 8006:8006 \
-v ./win-zh-storage:/storage \
-e VERSION="win11" \
-e LANGUAGE="zh-CN" \
dockurr/windows示例4:使用现有ISO文件
如果你已经下载了Windows ISO文件,可以直接使用:
docker run -d \
--name win-custom \
--device /dev/kvm \
-p 8006:8006 \
-v ./storage:/storage \
-v /path/to/your.iso:/custom.iso \
-e VERSION="custom" \
dockurr/windows示例5:通过RDP连接并传输文件
在Windows容器启动后,可以通过RDP连接,并使用剪贴板共享功能传输文件:
- 打开远程桌面客户端,连接到服务器IP:3389
- 登录Windows(用户名:administrator,密码在日志中)
- 在本地机器复制文件
- 在远程桌面会话中粘贴,文件会自动传输
示例6:备份和恢复Windows实例
备份Windows实例的完整状态:
# 停止容器
docker stop windows
# 备份存储目录
tar -czf windows-backup.tar.gz ./storage
# 恢复时,解压到存储目录
tar -xzf windows-backup.tar.gz
docker start windows示例7:多用户场景 - 启动多个Windows实例
在同一个服务器上运行多个独立的Windows容器:
# 实例1 - 端口8006和3389
docker run -d \
--name windows1 \
--device /dev/kvm \
-p 8006:8006 \
-p 3389:3389 \
-v ./win1-storage:/storage \
-e VERSION="win10" \
dockurr/windows
# 实例2 - 使用不同端口
docker run -d \
--name windows2 \
--device /dev/kvm \
-p 8007:8006 \
-p 3390:3389 \
-v ./win2-storage:/storage \
-e VERSION="win11" \
dockurr/windows六、常见问题
问题1:启动时提示“/dev/kvm: no such file or directory”
这表明宿主机不支持KVM或KVM模块未加载。解决方法:
- 确认CPU支持硬件虚拟化
- 检查BIOS中是否开启了虚拟化技术(Intel VT-x或AMD-V)
- 加载KVM模块:
sudo modprobe kvm_intel(Intel)或sudo modprobe kvm_amd(AMD) - 如果是在虚拟机中运行,需要确保嵌套虚拟化已开启
问题2:Windows安装卡住或启动很慢
可能的原因和解决方案:
- 内存分配不足,尝试增加RAM_SIZE(建议至少4GB)
- CPU核心数太少,尝试增加CPU_CORES
- 网络问题导致镜像下载慢,可以预先下载ISO文件放到本地
- 磁盘性能不足,确保存储目录在高速磁盘上
问题3:如何获取Windows的登录密码
首次启动时,Windows会自动设置管理员密码。查看密码:
docker logs windows | grep "password"或者查看日志开头部分,会显示类似:
User: administrator Password: 自动生成的密码问题4:Web访问界面(noVNC)显示黑屏
等待Windows完全启动(可能需要几分钟)。如果一直黑屏,尝试:
- 增加内存分配
- 检查CPU核心数是否足够
- 通过
docker logs windows查看启动日志,确认是否有错误 - 尝试使用RDP客户端连接,确认系统是否正常运行
问题5:如何重置Windows密码
如果需要重置密码,可以通过容器执行:
docker exec windows powershell -Command "net user administrator newpassword"问题6:容器重启后Windows需要重新安装
检查是否正确挂载了存储卷。确认
-v参数指定的目录在重启后仍然存在,并且容器启动时使用了相同的卷路径。问题7:性能比原生虚拟机差很多
dockur/windows的性能已经接近原生KVM虚拟机,但如果感觉性能较差,可以尝试:
- 增加分配的资源(CPU、内存)
- 确保宿主机没有其他重负载任务
- 使用SSD存储而不是机械硬盘
- 考虑在裸金属服务器上运行,而不是嵌套虚拟化环境
问题8:Windows激活问题
dockur/windows只是运行Windows系统,不提供激活服务。你需要使用自己的合法许可证激活Windows。在评估模式下,Windows可以运行一段时间而不激活。
七、总结
dockur/windows是一个极具创新性的开源项目,它打破了操作系统与容器技术之间的界限。通过巧妙的虚拟化技术,它让Windows系统能够以容器的形式运行,为跨平台开发和自动化带来了前所未有的便利。
这个项目的价值在于:
- 简化Windows环境部署:从需要完整虚拟机管理软件,到一条Docker命令即可启动,部署门槛大大降低。
- 资源利用更高效:容器化的Windows可以随用随起,停止后释放资源,适合临时任务和测试场景。
- 集成到自动化流程:Docker原生支持,可以轻松集成到CI/CD流水线、自动化脚本中。
- 降低成本:在服务器上运行多个Windows容器,比维护多台物理机或虚拟机更经济。
当然,dockur/windows也有其适用边界。对于需要GPU加速、实时性要求高的Windows应用,原生Windows环境仍然是更好的选择。但对于开发测试、自动化任务、临时使用等场景,它提供了一个极佳的解决方案。
如果你经常需要在非Windows平台上运行Windows应用,或者正在寻找更高效的Windows测试环境,dockur/windows绝对值得一试。它可能会改变你处理跨平台需求的方式,让你在Docker生态中获得前所未有的灵活性。
Overall, dockur/windows is a masterpiece of engineering. It combines Docker's simplicity with KVM's power to deliver a seamless Windows-in-a-container experience. The 50k stars are well deserved. Whether you're a developer needing occasional Windows access, or a team looking to streamline cross-platform testing, this tool is a must-have. It has fundamentally changed how I approach Windows automation.
这个项目让我重新思考了“容器”的定义。原来容器不只是跑Linux进程,还可以封装整个操作系统。技术边界在不断被打破。
The ability to set DISK_SIZE is very useful. I can give each Windows container exactly the storage it needs, not waste disk space like with VM templates.
MIT协议很友好,可以放心用在商业项目中。代码开源,有问题也能自己排查。
I've tried other solutions like VirtualBox and VMware, but nothing comes close to the simplicity of dockur/windows. One Docker command and you're done.
在CI/CD流程中集成这个太方便了。我们现在的GitHub Actions里,Windows测试直接用dockur/windows,不用等自托管runner了。
The resource usage is very efficient. When idle, the container uses minimal CPU. Much better than keeping a full VM running all the time.
最让我惊喜的是它支持嵌套虚拟化。我在一个KVM虚拟机里跑dockur/windows,居然也能正常工作。测试多层虚拟化场景的时候很有用。
I use this for software demonstrations. I can start a Windows container with the demo environment, share the web link with clients, and tear it down when done. Perfect for sales demos.
启动速度比传统虚拟机快很多。容器启动后几分钟就能进入桌面,Windows的首次设置都自动完成了。
The ARM64 support is underrated. I'm running Windows 11 on an Apple Silicon Mac with Docker Desktop. Finally a lightweight Windows VM alternative for Mac users.