【docker】Windows系统 docker版

时间煮雨-Master
2024-12-03 / 0 评论 / 0 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2025年02月26日,已超过440天没有更新,若内容或图片失效,请留言反馈。

在 Docker 容器中运行 Windows。

功能 ✨

  • ISO 下载器
  • KVM 加速
  • 基于 Web 的查看器

视频 📺

Youtube

使用方法 🐳

通过 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 EngineLinux
Docker DesktopLinux
Docker DesktopmacOS
Docker DesktopWindows 11
Docker DesktopWindows 10

常见问题 💬

如何使用它?

非常简单!步骤如下:

  • 启动容器并使用您的 Web 浏览器连接到 端口 8006
  • 坐下来放松,魔法正在发生,整个安装过程将完全自动执行。
  • 一旦您看到桌面,您的 Windows 安装就可以使用了。

享受您全新的机器,别忘了给这个仓库点个星!

如何选择 Windows 版本?

默认情况下,将安装 Windows 11 Pro。但您可以通过在 compose 文件中添加 VERSION 环境变量来指定要下载的替代 Windows 版本:

environment:
  VERSION: "11"

从以下值中选择:

版本大小
11Windows 11 Pro5.4 GB
11lWindows 11 LTSC4.2 GB
11eWindows 11 Enterprise5.8 GB
10Windows 10 Pro5.7 GB
10lWindows 10 LTSC4.6 GB
10eWindows 10 Enterprise5.2 GB
8eWindows 8.1 Enterprise3.7 GB
7eWindows 7 Enterprise3.0 GB
veWindows Vista Enterprise3.0 GB
xpWindows XP Professional0.6 GB
2025Windows Server 20255.0 GB
2022Windows Server 20224.7 GB
2019Windows Server 20195.3 GB
2016Windows Server 20166.5 GB
2012Windows Server 20124.3 GB
2008Windows Server 20083.0 GB
2003Windows Server 20030.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.

如何选择键盘布局?

如果您想要使用的键盘布局或区域设置不是所选语言的默认设置,您可以通过添加 KEYBOARDREGION 变量来指定区域代码,例如:

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-xAMD SVM)。
  • 如果您在虚拟机中运行容器,请启用“嵌套虚拟化”。
  • 您没有使用云提供商,因为大多数云提供商不允许在其 VPS 上进行嵌套虚拟化。

如果您没有从 kvm-ok 收到任何错误,但容器仍然抱怨 KVM,请检查是否:

  • 您没有使用“Docker Desktop for Linux”,因为它不支持 KVM,而是直接使用 Docker Engine。
  • 在 compose 文件中添加 privileged: true(或在 docker run 命令中添加 sudo)可能会有所帮助,以排除任何权限问题。
0

评论 (0)

取消
0:00