• 侧边栏壁纸
    • 累计撰写 61 篇文章
    • 累计收到 58 条评论
    • 栏目
    • 页面
    • 功能

    【docker】Windows docker版

    时间煮雨-Master
    2024-12-03 / 0 评论 / 6 阅读 / 正在检测是否收录...

    在 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"

    从以下值中选择:

    | | 版本 | 大小 |
    |---|---|---|
    | 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.

    如何选择键盘布局?

    如果您想要使用的键盘布局或区域设置不是所选语言的默认设置,您可以通过添加 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)

    取消