docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.5 \
--ip-range=192.168.1.224/28 \
-o parent=eth0 vlan
services:
windows:
image: dockurr/windows
container_name: windows
environment:
VERSION: "2003"
LANGUAGE: "Chinese"
REGION: "en-US"
KEYBOARD: "en-US"
DISK_SIZE: "30G"
USERNAME: "w800gl"
PASSWORD: "123123"
devices:
- /dev/kvm
cap_add:
- NET_ADMIN
networks:
vlan:
ipv4_address: 192.168.1.224
stop_grace_period: 2m
networks:
vlan:
external: trueDocker 容器内的 Windows。
特点
多语言
ISO 下载器
KVM加速
基于 Web 的查看器
用法
通过 Docker Compose:
services:
windows:
image: dockurr/windows
container_name: windows
environment:
VERSION: "win11"
devices:
- /dev/kvm
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 --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows通过 Kubernetes:
kubectl apply -f kubernetes.yml常见问题解答
我如何使用它?
非常简单!步骤如下:
启动容器并使用您的 Web 浏览器连接到端口 8006 。
当奇迹发生时,您可以坐下来放松,整个安装过程将完全自动完成。
一旦看到桌面,就表示您的 Windows 安装已可供使用。
享受您的全新机器,并且不要忘记为这个 repo 加星标!
如何选择 Windows 版本?
默认情况下,将安装 Windows 11。但您可以将VERSION环境变量添加到 Compose 文件中,以指定要下载的备用 Windows 版本:
environment:
VERSION: "win11"从以下值中选择:
提示
要安装 ARM64 版本的 Windows,请使用dockur/windows-arm。
如何选择 Windows 语言?
默认情况下,将下载英文版 Windows。但您可以将LANGUAGE环境变量添加到 Compose 文件中,以指定替代语言:
environment:
LANGUAGE: "French"您可以选择:🇦🇪阿拉伯语、🇧🇬保加利亚语、🇨🇳中文、🇭🇷克罗地亚语、🇨🇿捷克语、🇩🇰丹麦语、🇳🇱荷兰语、🇬🇧英语、🇪🇪爱沙尼亚语、🇫🇮芬兰语、🇫🇷法语、🇩🇪德语、🇬🇷希腊语、🇮🇱希伯来语、🇭🇺匈牙利语、🇮🇹意大利语、🇯🇵日语、🇰🇷韩语、🇱🇻拉脱维亚语、🇱🇹立陶宛语, 🇳🇴 挪威语、🇵🇱 波兰语、🇵🇹 葡萄牙语、🇷🇴 罗马尼亚语、🇷🇺 俄语、🇷🇸 塞尔维亚语、🇸🇰 斯洛伐克语、🇸🇮 斯洛文尼亚语、🇪🇸 西班牙语、🇸🇪 瑞典语、🇹🇭 泰语、🇹🇷 土耳其语和🇺🇦 乌克兰语。
如何选择键盘布局?
如果您想要使用非所选语言默认的键盘布局或区域设置,则可以添加带有文化代码KEYBOARD的REGION变量,如下所示:
environment:
REGION: "en-US"
KEYBOARD: "en-US"笔记
安装完成后,更改这些值将不会产生任何影响。在这种情况下,请使用 Windows 内的控制面板。
如何更改存储位置?
要更改存储位置,请在撰写文件中包括以下绑定挂载:
volumes:
- /var/win:/storage将示例路径替换/var/win为所需的存储文件夹。
如何更改磁盘大小?
要扩展 64 GB 的默认大小,请将DISK_SIZE设置添加到您的撰写文件中,并将其设置为您的首选容量:
environment:
DISK_SIZE: "256G"提示
这也可以用于将现有磁盘调整为更大的容量而不会丢失任何数据。
如何与主机共享文件?
打开“文件资源管理器”,点击“网络”部分,你会看到一台名为的计算机host.lan。双击它,它会显示一个名为的文件夹Data,可以通过撰写文件将其绑定到主机上的任何文件夹:
volumes:
- /home/user/example:/shared示例文件夹/home/user/example将以 形式提供 \\host.lan\Data。
提示
您可以将此路径映射到 Windows 中的驱动器号,以便于访问。
如何安装自定义图像?
为了下载上面列表中无法选择的不受支持的 ISO 映像,请在VERSION环境变量中指定该 ISO 的 URL,例如:
environment:
VERSION: "https://example.com/win.iso"或者,您也可以跳过下载并使用本地文件,通过以下方式将其绑定到您的撰写文件中:
volumes:
- /home/user/example.iso:/custom.iso将示例路径替换为您想要的 ISO 文件的文件名,在这种情况下将忽略/home/user/example.iso的值。VERSION
安装后如何运行脚本?
要在安装后运行您自己的脚本,您可以创建一个名为的文件install.bat,并将其与所需的任何其他文件(例如要安装的软件)一起放在文件夹中。然后将该文件夹绑定到您的撰写文件中,如下所示:
volumes:
- /home/user/example:/oem示例文件夹/home/user/example将在安装过程中被复制到C:\OEM,并且包含install.bat将在最后一步执行。
如何进行手动安装?
最好坚持自动安装,因为它会调整各种设置以防止在虚拟环境中运行 Windows 时出现常见问题。
但是,如果您坚持手动执行安装,请将以下环境变量添加到您的撰写文件中:
environment:
MANUAL: "Y"如何更改 CPU 或 RAM 的数量?
默认情况下,容器最多允许使用 2 个 CPU 核心和 4 GB RAM。
如果您想调整这个,您可以使用以下环境变量指定所需的数量:
environment:
RAM_SIZE: "8G"
CPU_CORES: "4"如何配置用户名和密码?
默认情况下,Docker安装过程中会创建一个名为的用户,其密码为空。
如果您想使用不同的凭据,您可以在撰写文件中更改它们:
environment:
USERNAME: "bill"
PASSWORD: "gates"如何使用 RDP 连接?
网络查看器主要用于安装期间使用,因为它的图像质量较低,并且没有音频或剪贴板。
Docker因此,为了获得更好的体验,您可以使用任何 Microsoft 远程桌面客户端使用用户名并将密码留空来连接到容器的 IP 。
Play Store 提供适用于Android的 RDP 客户端, Apple Store 提供适用于iOS 的RDP 客户端。对于 Linux,您可以使用FreeRDPmstsc ;对于 Windows,只需在搜索框中输入即可。
如何为容器分配单独的 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请务必修改这些值以匹配您的本地子网。
创建网络后,将撰写文件更改为如下所示:
services:
windows:
container_name: windows
..<snip>..
networks:
vlan:
ipv4_address: 192.168.0.100
networks:
vlan:
external: true这种方法的另一个好处是您不再需要执行任何端口映射,因为所有端口都会默认公开。
重要的
由于 macvlan 的设计不允许 Docker 主机与主机之间进行通信,因此无法从 Docker 主机访问此 IP 地址。如果担心此问题,您需要创建第二个 macvlan作为解决方法。
Windows 如何从我的路由器获取 IP 地址?
为macvlan配置容器后,Windows 就可以像真正的 PC 一样通过向路由器请求 IP 成为家庭网络的一部分。
要启用此模式,请将以下行添加到您的撰写文件中:
environment:
DHCP: "Y"
devices:
- /dev/vhost-net
device_cgroup_rules:
- 'c *:* rwm'笔记
在这种模式下,容器和 Windows 将各自拥有单独的 IP。
如何添加多个磁盘?
要创建其他磁盘,请像这样修改您的撰写文件:
environment:
DISK2_SIZE: "32G"
DISK3_SIZE: "64G"
volumes:
- /home/example:/storage2
- /mnt/data/example:/storage3如何直通磁盘?
可以通过以下方式将磁盘设备添加到撰写文件中来直接传递磁盘设备:
devices:
- /dev/sdb:/disk1
- /dev/sdc:/disk2/disk1如果您希望它成为主驱动器,请使用,并使用更高/disk2级别将其添加为辅助驱动器。
如何直通 USB 设备?
要直通 USB 设备,首先通过lsusb命令查找其供应商和产品 ID,然后将它们添加到您的撰写文件中,如下所示:
environment:
ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
devices:
- /dev/bus/usb重要的
如果设备是 USB 磁盘驱动器,请等到安装完成后再连接。否则安装可能会失败,因为磁盘的顺序可能会被重新排列。
如何验证我的系统是否支持 KVM?
要验证您的系统是否支持 KVM,请运行以下命令:
sudo apt install cpu-checker
sudo kvm-ok如果您收到错误,kvm-ok指示无法使用 KVM 加速,请检查:
您的 BIOS 中已启用虚拟化扩展(
Intel VT-x或)。AMD SVM您正在使用支持它们的操作系统,例如 Linux 或 Windows 11(不幸的是,macOS 和 Windows 10 不支持)。
如果您在虚拟机内运行容器,则您启用了“嵌套虚拟化”。
您没有使用云提供商,因为大多数云提供商不允许其 VPS 进行嵌套虚拟化。
如果您根本没有收到任何错误kvm-ok,但容器仍然抱怨/dev/kvm缺少内容,则将其添加privileged: true到您的撰写文件(或--privileged您的run命令)中可能会有所帮助,以排除任何权限问题。
如何在容器中运行 macOS?
您可以使用dockur/macos来实现这一点。除了自动安装之外,它们具有许多相同的功能。
这个项目合法吗?
是的,该项目仅包含开源代码,不分发任何受版权保护的材料。代码中找到的任何产品密钥都只是 Microsoft 为试用目的提供的通用占位符。因此,根据所有适用法律,该项目将被视为合法。
免责声明
本项目中提及的产品名称、徽标、品牌和其他商标均属于其各自的商标持有者。本项目与 Microsoft Corporation 没有任何关联、赞助或支持。
评论区