我先记第一次安装时最常用的命令:

docker run -d \
  --name windows \
  --restart always \
  --device=/dev/kvm \
  --device=/dev/net/tun \
  --cap-add NET_ADMIN \
  -p 8006:8006 \
  -p 3389:3389/tcp \
  -p 3389:3389/udp \
  -v /opt/windows:/storage \
  -v /opt/windows/windows.iso:/boot.iso \
  -e MANUAL=Y \
  -e RAM_SIZE=6G \
  -e CPU_CORES=24 \
  -e DISK_TYPE=nvme \
  -e DISK_SIZE=256G \
  dockurr/windows

这个命令适合第一次装系统的时候用,因为它保留了网页控制台,远程桌面没配好之前,至少还能从浏览器进去看安装过程。我自己最常改的环境变量基本就是下面这些:

-v /opt/windows/windows.iso:/boot.iso

挂载/opt/windows/windows.iso为系统镜像,如果没有挂载的话记得指定一下系统版本。

-e MANUAL=Y

表示手动安装。第一次部署时我一般都会先保留手动。

-e RAM_SIZE=6G

虚拟机内存大小,默认是4G

-e CPU_CORES=24

虚拟机核心数,默认是2

-e DISK_TYPE=nvme

虚拟磁盘类型,默认是scsi,但进到系统中硬盘会识别为可插拔,提示安全删除硬件和弹出媒体/Safely Remove Hardware and Eject Media,我一般会改为nvme,常见的选项有:

ide
sata
nvme
usb
scsi
blk
auto
none

如果更看重性能,一般会优先在nvmescsiblk里选。 如果更看重兼容性,就选sata

-e DISK_SIZE=256G

虚拟磁盘大小,默认是64G

虚拟机稳定以后,我一般会改用第二个命令:

docker run -d \
  --name windows \
  --restart always \
  --device=/dev/kvm \
  --device=/dev/net/tun \
  --cap-add NET_ADMIN \
  -p 3389:3389/tcp \
  -p 3389:3389/udp \
  -v /opt/windows:/storage \
  -v /opt/windows/windows.iso:/boot.iso \
  -e MANUAL=Y \
  -e RAM_SIZE=6G \
  -e CPU_CORES=24 \
  -e DISK_TYPE=nvme \
  -e DISK_SIZE=256G \
  -e DISPLAY=none \
  -e WEB=N \
  dockurr/windows

这个就是无头模式,只保留RDP,不用再开网页控制台。系统装好、远程桌面正常以后,我更推荐这个。


Windows 安装相关变量

变量 默认值 作用 可选值
APP Windows 产品名 任意字符串
SUPPORT https://github.com/dockur/windows 支持链接 任意 URL
PLATFORM x64 平台标识 x64
VERSION 11 安装版本 11``10``ISO URL
LANGUAGE en 安装语言 语言代码
REGION 区域设置 en-USfr-FR
KEYBOARD 键盘布局 en-USde-DE
USERNAME Docker 安装时创建的用户名 字母数字及 @!._-
PASSWORD admin 安装用户密码 字符串
KEY 产品密钥 25 位密钥
EDITION 服务器版安装 edition 常见 COREDATACENTERSTANDARD
MANUAL 是否手动安装 Y / N
VERIFY 下载后校验哈希 Y / N
WIDTH 1280 安装阶段分辨率宽 正整数
HEIGHT 720 安装阶段分辨率高 正整数
REMOVE 安装完成后删除 ISO Y / N
DETECTED 内部检测版本标记 内部值,不建议手动改
MIDO 启用 Mido 下载链路 Y / N
ESD 启用 ESD 下载链路 Y / N
UNPACK 解包后继续解包内层 ISO Y / N
SAMBA Y 启用共享目录 Y / N
SAMBA_DEBUG N Samba 调试日志 Y / N
SAMBA_LEVEL 1 Samba 日志级别 数字字符串
SAMBA_INTERFACE 绑定指定接口或 IP 接口名或 IP
QEMU_TIMEOUT 110 关机等待超时秒数 正整数

启动、CPU 和虚拟机核心变量

变量 默认值 作用 可选值
BOOT 通用启动镜像选择 关键字、URL、本地映射
BOOT_MODE windows 启动固件模式 uefi secure windows windows_plain windows_secure windows_legacy legacy custom
BOOT_INDEX 9 启动介质 boot index 数字
BIOS 自定义 BIOS 文件 容器内路径
LOGO 注入 UEFI logo Y / N
KVM Y 硬件加速 Y / N
MACHINE q35 QEMU machine 类型 q35pc
CPU_CORES 2 vCPU 数 数字、maxhalf
RAM_SIZE 4G 内存大小 2G8192Mmaxhalf
RAM_CHECK Y 检查可用内存并自动降配 Y / N
CPU_MODEL 自动 CPU 型号 任意 QEMU model,如 host
CPU_FLAGS 自动 附加 CPU 特性 QEMU -cpu flags
VMX N Windows 场景 VMX 开关 Y / N
HPET off machine hpet on / off
VMPORT off machine vmport on / off
UUID VM UUID UUID
TPM N swtpm Y / N
SMM N SMM Y / N
SERIAL mon:stdio 串口后端 任意 QEMU serial 参数
SMP $CPU_CORES,sockets=1,dies=1,cores=$CPU_CORES,threads=1 完整 SMP 拓扑 任意 QEMU -smp
MONITOR telnet:localhost:$MON_PORT,server,nowait,nodelay monitor 配置 任意 monitor 参数
MON_PORT 7100 monitor 端口 端口号
ARGUMENTS 追加 QEMU 参数 任意参数串
ARGS 内部兼容参数 字符串
DEBUG N 调试日志 Y / N
TRACE shell trace Y / N

磁盘和存储变量

变量 默认值 作用 可选值
STORAGE /storage 持久化目录 容器内路径
ALLOCATE N 是否预分配磁盘 Y / N
DISK_SIZE 64G 主盘大小 64G 200G max half
DISK2_SIZE 第二块盘大小 64G 200G max half
DISK3_SIZE 第三块盘大小 64G 200G max half
DISK4_SIZE 第四块盘大小 64G 200G max half
DISK5_SIZE 第五块盘大小 64G 200G max half
DISK6_SIZE 第六块盘大小 64G 200G max half
DISK_NAME data 磁盘文件名前缀 字符串
DEVICE 直通块设备 1 块设备路径
DEVICE2 直通块设备 2 块设备路径
DEVICE3 直通块设备 3 块设备路径
DEVICE4 直通块设备 4 块设备路径
DEVICE5 直通块设备 5 块设备路径
DEVICE6 直通块设备 6 块设备路径
DISK_FMT raw 磁盘格式 raw / qcow2
DISK_TYPE scsi 磁盘设备类型 ide sata nvme usb scsi blk auto none
MEDIA_TYPE 自动 光驱或安装介质设备类型 DISK_TYPE
DISK_IO native AIO 模式 native threads io_uring
DISK_CACHE none 磁盘缓存策略 常见 none writeback
DISK_DISCARD on TRIM 透传 on / off
DISK_ROTATION 1 旋转率 整数
DISK_FLAGS qcow2 附加参数 qemu-img 参数串

网络变量

变量 默认值 作用 可选值
NETWORK Y 网络类型总开关 NYtaptuntuntapuserpasstslirp
DHCP N 让客体从路由器拿 IP Y / N
ADAPTER virtio-net-pci 网卡型号 任意 QEMU NIC,如 e1000rtl8139
MAC 自动生成 MAC 地址 12 位或 17 位
MTU 自动探测 MTU 整数
HOST_PORTS 主机保留或排除端口 逗号分隔,如 22,80,443,3389/udp
USER_PORTS user mode 需要转发的端口 逗号分隔
VM_NET_IP 自动 客体 IP IPv4
VM_NET_DEV 自动 容器网卡名 eth0 net0
VM_NET_TAP qemu tap 或 macvtap 名 字符串
VM_NET_MAC $MAC 覆盖客体 MAC MAC
VM_NET_HOST $APP 客体 hostname 字符串
VM_NET_BRIDGE docker bridge 名 字符串
VM_NET_MASK 255.255.255.0 子网掩码 IPv4 mask
PASST /run/passt passt 可执行文件路径 文件路径
PASST_MTU passt MTU 整数
PASST_OPTS passt 参数 参数串
PASST_DEBUG passt 调试日志 Y / N
PASST_PID /var/run/passt.pid passt pid 文件 文件路径
DNSMASQ /usr/sbin/dnsmasq dnsmasq 程序路径 文件路径
DNSMASQ_OPTS dnsmasq 参数 参数串
DNSMASQ_DEBUG dnsmasq 调试日志 Y / N
DNSMASQ_CONF_DIR /etc/dnsmasq.d dnsmasq 配置目录 路径
DNSMASQ_PID /var/run/dnsmasq.pid dnsmasq pid 文件 路径
DNSMASQ_DISABLE 禁用 dnsmasq Y / N

显示、Web 和 USB 变量

变量 默认值 作用 可选值
DISPLAY web 显示输出模式 web vnc disabled none 或其它 QEMU display 字符串
VGA virtio 显卡类型 virtio std cirrus
GPU N Intel GPU 加速路径 Y / N
RENDERNODE /dev/dri/renderD128 GPU render node 设备路径
VNC_PORT 5900 VNC 端口 >=5900
WEB_PORT 8006 Web UI 端口 端口号
WSD_PORT 8004 websocketd 端口 端口号
WSS_PORT 5700 noVNC websocket 端口 端口号
WEB 是否启用 Web UI Y / N
USER admin Web Basic Auth 用户名 字符串,仅 PASS 设置时生效
PASS Web Basic Auth 密码 字符串
USB qemu-xhci,id=xhci,p2=7,p3=7 USB 控制器或设备参数 任意 QEMU -device 字符串,no 可禁用