一、速览:把 Windows 装进 Docker 容器

入门

dockur/windows 让你能在 Docker 容器里运行一个完整的 Windows 虚拟机。Docker 是一种把软件打包成“集装箱”、随处可运行的工具,而这个项目相当于把 Windows 也装进了这样的集装箱。

它解决了几个常见痛点。比如你的服务器是 Linux,但偶尔需要跑一个只有 Windows 才能用的软件;或者你想在 NAS 上开一个 Windows 环境做测试。不用单独装双系统,也不用再买一台 Windows 主机。

这个项目会自动下载 Windows 安装镜像并完成无人值守安装。它还支持 KVM 硬件加速——一种让 Linux 直接调用 CPU 虚拟化指令来跑虚拟机的技术,所以性能接近原生,不会像传统软件模拟那么卡。

dockur/windows 的 GitHub 项目预览

注意:这里跑的是完整 Windows 系统,不是某个 Windows 应用。它需要一定的 CPU、内存和磁盘资源,并不是轻量级容器。

二、安装前的准备

入门

开始安装前,你需要一台能联网的 Linux 服务器或 NAS。建议至少有 2 核 CPU、4GB 内存和 30GB 以上可用磁盘。为什么需要这些?因为 Windows 本身就比较占资源,磁盘太小装不下系统。

最关键的是 CPU 必须支持虚拟化技术(Intel VT-x 或 AMD-V),并且已经在主板 BIOS 里开启。你可以登录服务器执行下面这条命令检查:

ls -l /dev/kvm

如果显示 No such file or directory,说明 KVM 设备不存在,Windows 将只能使用软件模拟运行,速度会非常慢。

另外还需要 /dev/net/tun 设备,用于容器网络。用下面命令检查:

ls -l /dev/net/tun

最后,确保已经安装好 Docker 和 Docker Compose。如果还没装,可以参照 Docker 官方文档安装,这里不再展开。

三、安装:用 Docker Compose 启动

入门

推荐使用 Docker Compose 方式,因为配置更清晰、修改更方便。先创建一个目录存放配置文件和后续数据:

mkdir -p ~/windows
cd ~/windows

然后创建 docker-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

这个配置的含义是:使用 VERSION: "11" 指定安装 Windows 11;把宿主机 /dev/kvm/dev/net/tun 设备透传给容器;开放 8006 端口用于浏览器查看画面,3389 端口用于远程桌面;把当前目录下的 windows 文件夹挂载到容器内作为数据存储。

保存文件后,在目录下执行:

docker compose up -d

容器会开始运行并自动下载 Windows 安装镜像。也可以用 Docker CLI 单条命令启动,但参数较长,不如 Compose 直观。

四、核心用法:连接远程桌面和 Web 查看器

进阶 · 推荐细读

首次启动后,容器会自动下载 Windows 安装 ISO 并开始无人值守安装。整个过程可能需要十几分钟甚至更久,取决于服务器性能和网络速度。你可以用下面的命令查看安装日志:

docker logs -f windows

看到类似安装进度或重启信息时,说明系统正在安装。安装完成后,容器会自动进入 Windows 桌面。

要连接 Windows,最常用的方式是远程桌面。在 Windows 电脑上按 Win + R 输入 mstsc 打开远程桌面客户端,地址填 你的服务器IP:3389。默认用户名是 Docker,密码是 admin

如果没有 Windows 电脑,也可以在浏览器里打开 http://你的服务器IP:8006,这是项目提供的 Web 查看器,能实时看到 Windows 画面并操作,不过浏览器方式延迟会高一些。

官方演示视频截图,展示 dockur/windows 的运行画面

登录后建议尽快修改默认密码,尤其是把端口暴露到公网时,避免被他人登录。

五、配置:用户名、磁盘大小和资源共享

进阶 · 推荐细读

想要自定义 Windows 的配置,只需在 docker-compose.ymlenvironment: 部分添加变量,然后重新执行 docker compose up -d

最常见的是修改登录账户。默认用户是 Docker,密码 admin,你可以改成自己的:

environment:
  USERNAME: "bill"
  PASSWORD: "gates"

如果想调整磁盘大小,比如从默认的 64GB 扩到 256GB:

environment:
  DISK_SIZE: "256G"

注意,扩容后 Windows 里不会立刻显示新空间,需要手动在“磁盘管理”里扩展分区,因为新增空间会显示为未分配。

还可以通过 RAM_SIZECPU_CORES 指定内存和 CPU 核数。例如分配 8GB 内存和 4 核:

environment:
  RAM_SIZE: "8G"
  CPU_CORES: "4"

宿主机目录共享通过挂载实现:在 volumes: 里添加类似 ./share:/shared 的映射,Windows 内即可访问该共享目录。

六、运维场景:自启、备份与监控

深入 · 老手可选

如果你希望服务器重启后 Windows 容器自动运行,只需保留 restart: always 配置。Docker 会在开机后自动拉起容器,无需手动干预。

备份数据时,主要备份挂载目录(例如 ./windows)即可,里面存有虚拟磁盘和安装文件。直接把整个目录打包存放,恢复时放到同样路径重新启动容器就行。

监控资源占用可以用 Docker 自带的命令:

docker stats windows

它会实时显示 CPU、内存、网络和磁盘 IO。如果发现内存长期打满,建议调低 RAM_SIZE 或给宿主机增加内存。

这个容器也可以作为 CI/CD 流程的一部分。例如,在自动化测试中需要 Windows 环境时,用 Docker Compose 快速拉起一个临时 Windows,跑完测试再销毁。

七、踩坑:权限、网络和性能问题

深入 · 老手可选

常见的问题是容器无法访问 /dev/kvm。如果启动后日志提示 KVM 不可用,先检查宿主机是否有该设备。有设备但权限不足时,可以执行:

sudo chmod 666 /dev/kvm

不过这条命令只是临时解决,重启后可能失效。更稳妥的办法是把当前用户加入 kvm 组,再重新登录。

网络方面,默认使用 NAT 模式,容器内部可以上网,但外部设备不能主动访问 Windows 内的服务。如果需要局域网内其他设备直接访问,可以配置 macvlan 网络。这部分配置相对复杂,建议先确认是否真的需要。

磁盘扩容后,Windows 里显示的空间不会自动变大,必须到“磁盘管理”里手动扩展分区。如果跳过这步,新增的磁盘空间会一直处于未分配状态。

最后提醒:如果不使用 KVM 加速,Windows 会异常缓慢,甚至无法完成安装。务必确保 CPU 虚拟化已开启、/dev/kvm 可用后再正式使用。

项目信息

项目
仓库 dockur/windows
语言 Shell
Star 53,208
Fork 4,756
主页

参考链接

延伸阅读

想继续探索?这些同领域的教程可能也适合你: