在 Docker 容器中运行 Windows。
功能 ✨
- ISO 下载器
- KVM 加速
- 基于 Web 的查看器
视频 📺
使用方法 🐳
通过 Docker Compose:
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
stop_grace_period: 2m
通过 Docker CLI:
docker run -it --rm -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows
通过 Kubernetes:
kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml
兼容性 ⚙️
产品 | 平台 | |
---|---|---|
Docker Engine | Linux | ✅ |
Docker Desktop | Linux | ❌ |
Docker Desktop | macOS | ❌ |
Docker Desktop | Windows 11 | ✅ |
Docker Desktop | Windows 10 | ❌ |
常见问题 💬
如何使用它?
非常简单!步骤如下:
- 启动容器并使用您的 Web 浏览器连接到 端口 8006。
- 坐下来放松,魔法正在发生,整个安装过程将完全自动执行。
- 一旦您看到桌面,您的 Windows 安装就可以使用了。
享受您全新的机器,别忘了给这个仓库点个星!
如何选择 Windows 版本?
默认情况下,将安装 Windows 11 Pro。但您可以通过在 compose 文件中添加 VERSION
环境变量来指定要下载的替代 Windows 版本:
environment:
VERSION: "11"
从以下值中选择:
| 值 | 版本 | 大小 |
|---|---|---|
| 11
| Windows 11 Pro | 5.4 GB |
| 11l
| Windows 11 LTSC | 4.2 GB |
| 11e
| Windows 11 Enterprise | 5.8 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 |
| 7e
| Windows 7 Enterprise | 3.0 GB |
| ve
| Windows Vista Enterprise | 3.0 GB |
| xp
| Windows XP Professional | 0.6 GB |
||||
| 2025
| Windows Server 2025 | 5.0 GB |
| 2022
| Windows Server 2022 | 4.7 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 |
[!TIP]
要安装 ARM64 版本的 Windows,请使用 dockur/windows-arm。
如何更改存储位置?
要更改存储位置,请在 compose 文件中包含以下绑定挂载:
volumes:
- /var/win:/storage
将示例路径 /var/win
替换为您想要的存储文件夹。
如何更改磁盘大小?
要扩展默认的 64 GB 大小,请在 compose 文件中添加 DISK_SIZE
设置并将其设置为您喜欢的容量:
environment:
DISK_SIZE: "256G"
[!TIP]
这也可以用于将现有磁盘调整到更大的容量而不会丢失数据。
如何与主机共享文件?
打开“文件资源管理器”并点击“网络”部分,您将看到一个名为 host.lan
的计算机。双击它,您将看到一个名为 Data
的文件夹,可以通过 compose 文件将其绑定到主机上的任何文件夹:
volumes:
- /home/user/example:/data
示例文件夹 /home/user/example
将作为 \\host.lan\Data
可用。
[!TIP]
您可以将此路径映射到 Windows 中的驱动器号,以便更轻松地访问。
如何安装自定义镜像?
为了下载上面列表中不可选的 ISO 镜像,请在 VERSION
环境变量中指定该 ISO 的 URL,例如:
environment:
VERSION: "https://example.com/win.iso"
或者,您也可以跳过下载并使用本地文件,通过在 compose 文件中这样绑定它:
volumes:
- /home/user/example.iso:/custom.iso
将示例路径 /home/user/example.iso
替换为您想要的 ISO 文件名,此时 VERSION
的值将被忽略。
如何在安装后运行脚本?
要在安装后运行您自己的脚本,您可以创建一个名为 install.bat
的文件,并将其与所需的任何附加文件(例如要安装的软件)一起放在一个文件夹中。然后在 compose 文件中这样绑定该文件夹:
volumes:
- /home/user/example:/oem
示例文件夹 /home/user/example
将在安装期间复制到 C:\OEM
,并且包含的 install.bat
将在最后一步执行。
如何手动安装?
最好坚持使用自动安装,因为它会调整各种设置以防止在虚拟环境中运行 Windows 时的常见问题。
但是,如果您坚持要手动执行安装,请在 compose 文件中添加以下环境变量:
environment:
MANUAL: "Y"
如何更改 CPU 或 RAM 的数量?
默认情况下,容器最多可以使用 2 个 CPU 核心和 4 GB 的 RAM。
如果想要调整这些设置,可以使用以下环境变量指定所需的量:
environment:
RAM_SIZE: "8G"
CPU_CORES: "4"
如何配置用户名和密码?
默认情况下,在安装期间会创建一个名为 Docker
的用户,密码为空。
如果想要使用不同的凭据,可以在 compose 文件中更改它们:
environment:
USERNAME: "bill"
PASSWORD: "gates"
如何选择 Windows 语言?
默认情况下,将下载英文版本的 Windows。但您可以通过在 compose 文件中添加 LANGUAGE
环境变量来指定替代语言:
environment:
LANGUAGE: "Chinese"
您可以选择以下语言:🇦🇪 阿拉伯语, 🇧🇬 保加利亚语, 🇨🇳 中文, 🇭🇷 克罗地亚语, 🇨🇿 捷克语, 🇩🇰 丹麦语, 🇳🇱 荷兰语, 🇬🇧 英语, 🇪🇪 爱沙尼亚语, 🇫🇮 芬兰语, 🇫🇷 法语, 🇩🇪 德语, 🇬🇷 希腊语, 🇮🇱 希伯来语, 🇭🇺 匈牙利语, 🇮🇹 意大利语, 🇯🇵 日语, 🇰🇷 韩语, 🇱🇻 拉脱维亚语, 🇱🇹 立陶宛语, 🇳🇴 挪威语, 🇵🇱 波兰语, 🇵🇹 葡萄牙语, 🇷🇴 罗马尼亚语, 🇷🇺 俄语, 🇷🇸 塞尔维亚语, 🇸🇰 斯洛伐克语, 🇸🇮 斯洛文尼亚语, 🇪🇸 西班牙语, 🇸🇪 瑞典语, 🇹🇭 泰语, 🇹🇷 土耳其语 和 🇺🇦 乌克兰语。
🇦🇪 Arabic, 🇧🇬 Bulgarian, 🇨🇳 Chinese, 🇭🇷 Croatian, 🇨🇿 Czech, 🇩🇰 Danish, 🇳🇱 Dutch, 🇬🇧 English, 🇪🇪 Estonian, 🇫🇮 Finnish, 🇫🇷 French, 🇩🇪 German, 🇬🇷 Greek, 🇮🇱 Hebrew, 🇭🇺 Hungarian, 🇮🇹 Italian, 🇯🇵 Japanese, 🇰🇷 Korean, 🇱🇻 Latvian, 🇱🇹 Lithuanian, 🇳🇴 Norwegian, 🇵🇱 Polish, 🇵🇹 Portuguese, 🇷🇴 Romanian, 🇷🇺 Russian, 🇷🇸 Serbian, 🇸🇰 Slovak, 🇸🇮 Slovenian, 🇪🇸 Spanish, 🇸🇪 Swedish, 🇹🇭 Thai, 🇹🇷 Turkish and 🇺🇦 Ukrainian.
如何选择键盘布局?
如果您想要使用的键盘布局或区域设置不是所选语言的默认设置,您可以通过添加 KEYBOARD
和 REGION
变量来指定区域代码,例如:
environment:
REGION: "en-US"
KEYBOARD: "en-US"
[!NOTE]
更改这些值在安装完成后将不会有任何效果。在这种情况下,请在 Windows 的控制面板中进行更改。
如何使用 RDP 连接?
Web 查看器主要用于安装期间使用,因为它的图像质量较低,并且没有音频或剪贴板等功能。
因此,为了获得更好的体验,您可以使用任何 Microsoft 远程桌面客户端连接到容器的 IP,使用用户名 Docker
并留空密码。
在 Play Store 上有一个适用于 Android 的 RDP 客户端,在 Apple Store 上有一个适用于 iOS 的 RDP 客户端。对于 Linux,您可以使用 FreeRDP,在 Windows 上只需在搜索框中输入 mstsc
。
如何为容器分配单独的 IP 地址?
默认情况下,容器使用桥接网络,与主机共享 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 的设计,此 IP 地址将无法从 Docker 主机访问,因为它不允许两者之间的通信。如果这是一个问题,您需要创建一个 第二个 macvlan 作为解决方法。
如何让 Windows 从我的路由器获取 IP 地址?
在为容器配置 macvlan 后,Windows 可以通过从路由器请求 IP 地址,就像一台真正的 PC 一样,成为您家庭网络的一部分。
要启用此模式,请在 compose 文件中添加以下行:
environment:
DHCP: "Y"
devices:
- /dev/vhost-net
device_cgroup_rules:
- 'c *:* rwm'
[!NOTE]
在此模式下,容器和 Windows 将各自拥有独立的 IP。
如何添加多个磁盘?
要创建额外的磁盘,请按如下方式修改您的 compose 文件:
environment:
DISK2_SIZE: "32G"
DISK3_SIZE: "64G"
volumes:
- /home/example:/storage2
- /mnt/data/example:/storage3
如何直通磁盘?
可以通过在 compose 文件中以这种方式添加磁盘设备来直接直通磁盘设备:
devices:
- /dev/sdb:/disk1
- /dev/sdc:/disk2
如果想要将其作为主驱动器(在安装期间将被格式化),请使用 /disk1
,如果想要将其作为辅助驱动器(将保持不变),请使用 /disk2
及以上。
如何直通 USB 设备?
要直通 USB 设备,首先通过 lsusb
命令查找其供应商和产品 ID,然后按如下方式将其添加到 compose 文件中:
environment:
ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
devices:
- /dev/bus/usb
[!IMPORTANT]
如果设备是 USB 磁盘驱动器,请等到安装完成后连接它。否则安装可能会失败,因为磁盘的顺序可能会被打乱。
如何验证我的系统是否支持 KVM?
只有 Linux 和 Windows 11 支持 KVM 虚拟化,macOS 和 Windows 10 不支持。
您可以在 Linux 中运行以下命令来检查您的系统:
sudo apt install cpu-checker
sudo kvm-ok
如果您从 kvm-ok
收到错误,指示无法使用 KVM,请检查是否:
- 在 BIOS 中启用了虚拟化扩展(
Intel VT-x
或AMD SVM
)。 - 如果您在虚拟机中运行容器,请启用“嵌套虚拟化”。
- 您没有使用云提供商,因为大多数云提供商不允许在其 VPS 上进行嵌套虚拟化。
如果您没有从 kvm-ok
收到任何错误,但容器仍然抱怨 KVM,请检查是否:
- 您没有使用“Docker Desktop for Linux”,因为它不支持 KVM,而是直接使用 Docker Engine。
- 在 compose 文件中添加
privileged: true
(或在docker run
命令中添加sudo
)可能会有所帮助,以排除任何权限问题。
评论 (0)