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生态中获得前所未有的灵活性。
I'm using this to run legacy Windows software that won't run on modern Windows. Works perfectly and I can snapshot the container to preserve the environment.
中文版Windows支持得很好,设置LANGUAGE="zh-CN"就能得到一个简体中文环境。测试中文软件的时候很方便。
The configuration via environment variables is very flexible. I can easily adjust RAM, CPU cores, disk size, and even choose between different Windows versions. Much simpler than managing VM configs.
之前为了跑一个Windows批处理脚本,专门开了个虚拟机,占用资源大还麻烦。现在用dockur/windows,几秒钟就能启动一个Windows容器,用完直接删掉。
The noVNC web access is brilliant. I don't even need an RDP client. Just open a browser on any device and I'm connected to my Windows environment. Perfect for remote work.
KVM加速的效果很好,Win11运行起来很流畅,基本感觉不到是在容器里跑的。分配了4核8G内存,日常开发测试完全够用。
I've been using this for CI/CD testing. Our GitLab pipeline now spins up a Windows container, runs PowerShell tests, and tears it down. Much cheaper than maintaining dedicated Windows build agents.
自动安装功能太强了,完全不用手动点下一步。容器启动后等一会儿,就能看到一个配置好的Windows桌面。对于临时需要Windows环境的人来说太方便了。
This is a game changer for cross-platform development. I'm a Linux user but need to test my app on Windows occasionally. Now I just spin up a container, run my tests, and destroy it. Perfect.
5万星标实至名归。第一次看到这个项目的时候完全不敢相信,试了一下真的能在Linux服务器上跑Win11。通过浏览器访问Windows桌面,体验很流畅。
这个项目太神奇了!居然能在Docker里跑Windows。之前为了测试一个Windows-only的软件,专门买了个Windows电脑,现在一条Docker命令就搞定了,省了不少钱。