Docker 容器中的 Windows。
services:
windows:
image: dockurr/windows
container_name: windows
environment:
VERSION: "11"
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 3389:3389/tcp
- 3389:3389/udp
volumes:
- ./windows:/storage
restart: always
stop_grace_period: 2m
docker run -it --rm --name windows -e "VERSION=11" -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --stop-timeout 120 docker.io/dockurr/windows
kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml
[!NOTE] 当前,Linux、macOS 和 Windows 10 上的 Docker Desktop 无法为容器提供 KVM 访问权限,因此不受支持。
非常简单!步骤如下:
启动容器,并使用 Web 浏览器连接到 8006 端口。
安坐并静候佳音,整个安装过程将完全自动执行。
一旦看到桌面,您的 Windows 安装即可使用。
享受您全新的机器,别忘了为本仓库加星!
默认情况下,将安装 Windows 11 专业版。但您可以在 compose 文件中添加 VERSION 环境变量,以指定要下载的其他 Windows 版本:
environment:
VERSION: "10"
从以下值中选择:
[!TIP] 如需安装 ARM64 版本的 Windows,请使用 dockur/windows-arm。
要更改存储位置,请在 compose 文件中添加以下绑定挂载:
volumes:
- ./windows:/storage
将示例路径 ./windows 替换为您想要的存储文件夹或命名卷。
要将默认的 64 GB 空间扩大,请在 compose 文件中添加 DISK_SIZE 设置,并设置为您希望的容量:
environment:
DISK_SIZE: "256G"
[!TIP] 这也可以用来将现有磁盘扩容,而不会丢失任何数据。不过,之后您需要手动扩展磁盘分区,因为新增的磁盘空间会显示为未分配。
安装完成后,桌面上会有一个名为 Shared 的文件夹,可用于与宿主机交换文件。
要为这一用途选择宿主机上的文件夹,请在 compose 文件中添加以下绑定挂载:
volumes:
- ./example:/shared
将示例路径 ./example 替换为您希望共享的文件夹,之后它将显示为 Shared。
默认情况下,Windows 可使用 2 个 CPU 核心和 4 GB 内存。
如果您想调整这些数值,可以使用以下环境变量指定所需数量:
environment:
RAM_SIZE: "8G"
CPU_CORES: "4"
默认会创建一个名为 Docker 的用户,密码为 admin。
如果您想在安装期间设置不同的凭据,可以在 compose 文件中配置:
environment:
USERNAME: "bill"
PASSWORD: "gates"
默认情况下,会下载英文版 Windows。
但您可以在 compose 文件中添加 LANGUAGE 环境变量,以指定要下载的其他语言:
environment:
LANGUAGE: "French"
您可以在以下语言之间选择:🇦🇪 阿拉伯语、🇧🇬 保加利亚语、🇨🇳 中文、🇭🇷 克罗地亚语、🇨🇿 捷克语、🇩🇰 丹麦语、🇳🇱 荷兰语、🇬🇧 英语、🇪🇪 爱沙尼亚语、🇫🇮 芬兰语、🇫🇷 法语、🇩🇪 德语、🇬🇷 希腊语、🇮🇱 希伯来语、🇭🇺 匈牙利语、🇮🇹 意大利语、🇯🇵 日语、🇰🇷 韩语、🇱🇻 拉脱维亚语、🇱🇹 立陶宛语、🇳🇴 挪威语、🇵🇱 波兰语、🇵🇹 葡萄牙语、🇷🇴 罗马尼亚语、🇷🇺 俄语、🇷🇸 塞尔维亚语、🇸🇰 斯洛伐克语、🇸🇮 斯洛文尼亚语、🇪🇸 西班牙语、🇸🇪 瑞典语、🇹🇭 泰语、🇹🇷 土耳其语和 🇺🇦 乌克兰语。
如果您想设置所选语言的非默认键盘布局或区域设置,可以像这样添加 KEYBOARD 和 REGION 变量:
environment:
REGION: "en-US"
KEYBOARD: "en-US"
若要下载不受支持的 ISO 镜像,请在 VERSION 环境变量中指定其 URL:
environment:
VERSION: "https://example.com/win.iso"
另外,您也可以跳过下载,改用本地文件,方法是在 compose 文件中以这种方式绑定它:
volumes:
- ./example.iso:/custom.iso
将示例路径 ./example.iso 替换为您想要的 ISO 文件的文件名。在这种情况下,VERSION 的值会被忽略。
要在安装后运行您自己的脚本,您可以创建一个名为 install.bat 的文件,并将其与所需的其他文件(例如要安装的软件)一起放在一个文件夹中。
然后在 compose 文件中这样绑定该文件夹:
volumes:
- ./example:/oem
示例文件夹 ./example 会被复制到 C:\OEM,该文件夹中的 install.bat 文件将在自动安装的最后一步执行。
建议采用自动安装的方式,因为它会调整各种设置,以避免在虚拟环境中运行 Windows 时出现的常见问题。
不过,如果您坚持手动安装(风险自负),请在 compose 文件中添加以下环境变量:
environment:
MANUAL: "Y"
Web 查看器主要供安装期间使用,因为它的响应速度不如 RDP,而且不支持剪贴板共享等功能。
因此,为了获得更好的体验,您可以使用任意 Microsoft 远程桌面客户端,使用用户名 Docker 和密码 admin 连接到容器的 IP 地址。
在 Play Store 中有适用于 Android 的 RDP 客户端,在 Apple Store 中有适用于 iOS 的客户端。在 Linux 上可以使用 FreeRDP,在 Windows 上只需在搜索框中输入 mstsc。
默认情况下,除非使用 RDP,否则音频处于禁用状态。要将其流式传输到浏览器,请添加以下环境变量:
environment:
AUDIO: "Y"
然后在 Web 查看器中,在设置 → 高级下启用音频。该流仅在启用此选项时处于活动状态,否则不会占用额外的带宽。
默认情况下,容器使用桥接网络,与宿主机共享 IP 地址。
如果您想为容器分配一个独立的 IP 地址,可以按如下方式创建 macvlan 网络:
docker network create -d macvlan \
--subnet=192.168.0.0/24 \
--gateway=192.168.0.1 \
--ip-range=192.168.0.100/28 \
-o parent=eth0 vlan
请务必将这些值修改为与您的本地子网一致。
创建好网络后,将您的 compose 文件修改为如下所示:
services:
windows:
container_name: windows
..<snip>..
networks:
vlan:
ipv4_address: 192.168.0.100
networks:
vlan:
external: true
这种方式的另一个好处是,您不再需要进行任何端口映射,因为默认情况下所有端口都会暴露。
[!IMPORTANT]
由于 macvlan 的设计不允许 Docker 宿主机与容器之间进行通信,因此无法从 Docker 宿主机访问此 IP 地址。如果您在意这一点,需要创建一个第二个 macvlan 作为变通方案。
在将容器配置为 macvlan 后,Windows 可以像真实 PC 一样,通过向路由器请求 IP 来加入您的家庭网络。
要启用此模式(容器和 Windows 将拥有各自的 IP 地址),请在 compose 文件中添加以下行:
environment:
DHCP: "Y"
devices:
- /dev/vhost-net
device_cgroup_rules:
- 'c *:* rwm'
要创建额外的磁盘,请像这样修改 compose 文件:
environment:
DISK2_SIZE: "32G"
DISK3_SIZE: "64G"
volumes:
- ./example2:/storage2
- ./example3:/storage3
您可以通过以下方式将磁盘设备或分区直接透传,只需将它们添加到 compose 文件中:
devices:
- /dev/sdb:/disk1
- /dev/sdc1:/disk2
如果您希望某个磁盘成为主驱动器(在安装过程中会被格式化),请使用 /disk1;使用 /disk2 及更高编号将其添加为辅助驱动器(这些驱动器将保持原样,不会被改动)。
要透传 USB 设备,请先使用 lsusb 命令查询其厂商 ID 和产品 ID,然后像这样将它们添加到 compose 文件中:
environment:
ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
devices:
- /dev/bus/usb
[!WARNING]
在 Windows 安装程序完成之前添加 USB 大容量存储设备可能会导致安装失败。更糟的是:该驱动器可能会被格式化为系统磁盘,您所有的数据都将丢失!因此,在首次启动容器时,请务必保持这些设备处于断开状态。
不是。有关所有受支持设置的完整概述,请参阅环境变量页面。
首先,请确保您的平台和容器运行时满足上文列出的要求。
在 Linux 宿主机上,安装 cpu-checker 并运行:
sudo apt install cpu-checker
sudo kvm-ok
配置正常时应显示:
KVM acceleration can be used
您还可以验证 KVM 设备是否存在:
ls -l /dev/kvm
如果 KVM 不可用,请检查是否存在以下情况:
Intel VT-x 或 AMD-V)。如果 kvm-ok 成功,但容器仍报告 KVM 不可用,您可以临时在 Compose 文件中添加 privileged: true,以排除权限或设备访问问题。
您可以使用 dockur/macos。它拥有许多相同的功能,但自动安装功能除外。
这种情况下,您可以使用 qemus/qemu。
是的,本项目仅包含开源代码,不分发 Windows 本身。代码中的任何产品密钥都是 Microsoft 为试用目的发布的通用安装密钥,并非有效的激活许可证。
您有责任确保自己拥有有效的 Windows 许可证,并确保您的使用符合 Microsoft 的许可条款。
本项目中所提及的产品名称、徽标、品牌及其他商标均为其各自商标持有人的财产。本项目与 Microsoft Corporation 无任何隶属、赞助或背书关系。
| 值 | 版本 | 大小 |
|---|
11 | Windows 11 Pro | 7.9 GB |
11l | Windows 11 LTSC | 4.7 GB |
11e | Windows 11 Enterprise | 6.6 GB |
10 | Windows 10 Pro | 5.7 GB |
10l | Windows 10 LTSC | 4.6 GB |
10e | Windows 10 Enterprise | 5.2 GB |
8e | Windows 8.1 Enterprise | 3.7 GB |
7u | Windows 7 Ultimate | 3.1 GB |
vu | Windows Vista Ultimate | 3.0 GB |
xp | Windows XP Professional | 0.6 GB |
2k | Windows 2000 Professional | 0.4 GB |
2025 | Windows Server 2025 | 7.6 GB |
2022 | Windows Server 2022 | 6.0 GB |
2019 | Windows Server 2019 | 5.3 GB |
2016 | Windows Server 2016 | 6.5 GB |
2012 | Windows Server 2012 | 4.3 GB |
2008 | Windows Server 2008 | 3.0 GB |
2003 | Windows Server 2003 | 0.6 GB |