Docker 运行 Windows 全流程:1 份 Compose 配置,从 KVM 自检到日常使用
2026/8/30 14:27:04 网站建设 项目流程

Docker 运行 Windows 全流程:1 份 Compose 配置,从 KVM 自检到日常使用

【免费下载链接】windowsWindows inside a Docker container.项目地址: https://gitcode.com/GitHub_Trending/wi/windows

老同事发来一份 2009 年的行业软件,装不上 Windows 11,但公司又没人愿意为它单独开一台虚拟机。Dockur/Windows 这个项目就是把 Windows 装进一个 Docker 容器里跑:官方 ISO 自动下载、安装全程无人值守,你只需要在浏览器里看着进度条走完。本文按你实际会经历的路径走一遍——先判断值不值得跑,再检查机器条件,最后讲日常怎么用、卡住怎么查。

三个值得上手的真实场景

  • 怀旧与兼容性测试:Win7、XP 甚至 98 上的老插件、老驱动、老游戏,不用翻旧硬盘找镜像机,容器里几分钟就装好一套。
  • 教学演示:给学生或新人一台"用完即毁"的 Windows 环境,装坏直接删容器重来,宿主机不沾一点痕迹。
  • 远程办公与临时工位:家里 Linux 机器白天跑业务,晚上开个 Windows 容器处理公司系统,下班关容器,内存立刻归零。

判断标准很简单:只要你能接受"它是一台完整的虚拟 Windows,而不是原生应用",这三类需求它都接得住。

跑之前:KVM 一键自检

容器里跑 Windows 靠的是 KVM 硬件加速,没有它性能会掉到不可用,所以这是唯一硬性前置条件。

在 Linux 宿主机上执行:

sudo apt install cpu-checker sudo kvm-ok

输出KVM acceleration can be used就说明虚拟化可用;再ls -l /dev/kvm确认设备节点存在。其他要求门槛不高:Docker(或 Podman)已装好、可用内存至少 2GB、磁盘至少 32GB 空闲。

两个常见的坑提前说:

  • Docker Desktop(Linux/macOS 版)不向容器暴露 KVM,不支持,要用原生 Docker 引擎。
  • 宿主机本身是虚拟机或 VPS 时,需要确认嵌套虚拟化已开启,否则kvm-ok会失败。

如果kvm-ok通过但容器里仍报 KVM 不可用,可以在 compose 文件里临时加一行privileged: true,排除设备权限问题。

一份 Compose 文件跑起来

项目根目录已有一份现成的 compose.yml,你只需要把它拷下来、按需改版本即可。完整配置如下:

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

保存为compose.yml,执行docker compose up -d。等安装结束后,浏览器打开http://127.0.0.1:8006就能看到桌面。8006 是网页控制台,3389 是 RDP 端口,/storage挂到./windows是为了把磁盘镜像留在宿主机,删容器不丢系统。

如果你更喜欢纯命令行,等价做法是一条docker run:加上-e "VERSION=11" -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ./windows:/storage --stop-timeout 120 dockurr/windows,效果完全一样。生产环境想放到 K8s 的话,仓库里的 kubernetes.yml 可以直接kubectl apply

选哪个系统:VERSION 代码对照

版本号通过VERSION环境变量指定,不写默认装 Windows 11 Pro。镜像体积差异很大,按用途选:

代码系统体积
11Windows 11 Pro7.9 GB
11lWindows 11 LTSC4.7 GB
10Windows 10 Pro5.7 GB
7uWindows 7 Ultimate3.1 GB
xpWindows XP Professional0.6 GB
2022Windows Server 20226.0 GB
tiny11Tiny11(精简版 11)5.3 GB

完整清单(含 Vista、Windows 95/98/ME、2000/2003 到 Server 2025、ReactOS)见 docs/environment.md。另外两个实用选项:LANGUAGE: "Chinese"装中文系统;VERSION也可以直接填一个 ISO 下载地址,或者把本地 ISO 挂载为/custom.iso跳过下载。

内存不够就改这一行

默认分配 2 核 CPU、4GB 内存、64GB 磁盘。三个参数都在environment里,改完重建容器生效:

  • RAM_SIZE: "8G":内存不够就加这里,也支持halfmax按宿主机比例分配。
  • CPU_CORES: "4":同理支持halfmax
  • DISK_SIZE: "256G":默认 64GB 装完系统还剩很多,但装数据库或大量软件前建议调大。这个变量对已存在的磁盘同样有效——直接改大再启动,旧数据不丢,只是新空间会以未分配区出现,需要在 Windows 磁盘管理里手动扩展。

参考档位:轻度办公 2 核 + 4GB 就够;日常开发 4 核 + 8GB 比较从容。宿主机内存紧张时可以开启内存气球(ballooning),让容器按宿主内存压力动态回收 Windows 里的闲置内存。

装好之后怎么用最舒服

网页控制台主要服务于安装阶段,日常使用建议切到 RDP,体验接近原生,还支持剪贴板。用任意微软远程桌面客户端连容器 IP,账号Docker,密码admin,手机上有 Android/iOS 版客户端,Linux 用 FreeRDP,Windows 直接mstsc。账号想改的话,安装前设USERNAME/PASSWORD即可。

文件传输靠 Shared 文件夹:把宿主机目录挂载到/shared,桌面会出现Shared快捷方式,同时映射为Z:盘,Samba 协议实现,双向读写。

想让 Windows 像真机一样进局域网(而不是走容器 NAT),两条路:建一个 macvlan 网络并在 compose 里指定ipv4_address,容器拿到固定 IP,顺带连端口映射都省了;或者加DHCP: "Y"并挂载/dev/vhost-net走 macvtap,让 Windows 直接向路由器要 DHCP 地址,连打印机、投屏都方便。注意 macvlan 模式下宿主机会访问不到该 IP,需要回宿主机时要另建一条网络。

卡住时的自查清单

按出现频率排序:

  1. 启动报 KVM 不可用:先跑kvm-ok,再查 BIOS 里 VT-x / AMD-V 是否开启;宿主机是虚拟机的话确认嵌套虚拟化。kvm-ok通过仍报错时,临时加privileged: true排除权限问题。
  2. 安装过程卡住或失败:确认宿主机网络稳定(ISO 是下载完才装的)、磁盘剩余空间是否够镜像体积的 2 倍以上;/storage所在分区空间不足是最常见原因。
  3. 网页画面慢、RDP 连不上:网页端定位偏低是正常的,日常请用 RDP;确认 3389 端口映射存在,用容器 IP 而不是宿主机 IP 连接。
  4. 整体偏慢:优先加内存到 8GB 以上,其次加 CPU 核心,最后才怀疑 KVM。

更多参数(USB 直通、多磁盘、音频流、加域等)全在 docs/environment.md,安装逻辑本身可以翻 src/ 下的脚本看。

一句话收尾:一台支持 KVM 的 Linux 机器加一份 Compose 配置,你就拥有了一台随开随关、装完即可用的 Windows。

【免费下载链接】windowsWindows inside a Docker container.项目地址: https://gitcode.com/GitHub_Trending/wi/windows

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询