WindowsinDocker直通显卡网卡

让套娃来的更狠些吧~

之前看到这个dockur/windows项目感觉套娃很好玩,一开始只想着替代chrome
后来发现很多人其实有GPU需要,这个issues经过几个月的发展,现在看到意见完美解决了,特来走下流程
已经完美支持硬盘 网卡 显卡 USB设备直通


题外话,另一个项目(virtual-dsm)[https://github.com/vdsm/virtual-dsm]也好玩的~

安装说明

勾选要直通的设备并重启


勾选PCI设备,例如SATA控制器/显卡/网卡等

安装WindowsinDocker

UNRAID应用市场搜索WindowsinDocker安装

直通设备

添加设备,值中填入/dev/vfio

添加ARGUMENTS变量 将要直通设备代码添加到值中

例如我要添加**虚拟声卡 显卡 网卡 UPS 隐藏虚拟化 **就要添加以下内容
需要注意的是,每一段都有空格,按自己需求增删套用

-device vfio-pci,host=01:00.0,multifunction=on -device vfio-pci,host=03:00.1,multifunction=on -device usb-host,vendorid=0x051d,productid=0x0002 -cpu host,-hypervisor,+kvm_pv_unhalt,+kvm_pv_eoi,hv_spinlocks=0x1fff,hv_vapic,hv_time,hv_reset,hv_vpindex,hv_runtime,hv_relaxed,kvm=off,hv_vendor_id=intel

修改自动安装默认语言

添加LANGUAGE变量 值中填入Chinese

使用自定义ISO镜像

修改默认Version值为custom.iso
映射自定义ISO为custom.iso

小贴士 自动安装只支持原版ISO,第三方精简版无法使用自动安装

修改默认用户名密码

默认自动安装用户名为Docker密码为空
添加USERNAMEPASSWORD变量,值填入自定义用户名/密码

添加硬盘

通过lsblk命令获取自己需要添加的硬盘

root@Tower:~# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0         7:0    0  64.8M  1 loop /lib
loop1         7:1    0 355.2M  1 loop /usr
loop2         7:2    0    16G  0 loop /etc/libvirt
sda           8:0    1  28.7G  0 disk 
└─sda1        8:1    1  28.7G  0 part /boot
sdb           8:16   0   9.1T  0 disk 
└─sdb1        8:17   0   9.1T  0 part 
sdc           8:32   0 931.5G  0 disk 
└─sdc1        8:33   0 931.5G  0 part 
sdd           8:48   0 447.1G  0 disk 
md1p1         9:1    0 931.5G  0 md   /var/lib/docker
                                      /mnt/disk1
md3p1         9:3    0   9.1T  0 md   /mnt/disk3
md5p1         9:5    0 931.5G  0 md   /mnt/disk5
nvme0n1     259:0    0 931.5G  0 disk 
└─nvme0n1p1 259:1    0 931.5G  0 part 

例如我要添加的是sdd
就添加设备,填入/dev/sdd:/disk1

sdd为我需要添加的硬盘
/disk1123456按优先级依次引导,系统要安装在此硬盘就设置为1
默认占用全部空间,要D盘自动手动压缩下
更多说明看作者文档

添加共享目录

添加路径/mnt/user/shua/:/shared
/mnt/user/shua/为UNRAID实际路径

可直接在网络中名称为host.lan的主机直接访问挂载的文件夹

直通相关说明

添加PCI设备

很简单,要什么就加什么
例如添加独显

如我的P4就一个01:00.0那就加一个

-device vfio-pci,host=01:00.0,multifunction=on

正牌军有01:00.1之类的就依次补全

-device vfio-pci,host=01:00.0,multifunction=on -device vfio-pci,host=01:00.1,multifunction=on

例如添加网卡

我只分配第二个网口

-device vfio-pci,host=03:00.1,multifunction=on

小贴士如添加网卡后在容器中将网络类型设置为 则无法正常启动
如将虚拟网卡禁用 则host.lan无法访问

添加usb设备

先添加设备,值中填入/dev/bus/usb
例如添加UPS

找到对应的ID代入即可

-device usb-host,vendorid=0x051d,productid=0x0002

添加虚拟声卡

如果你用RDP或者直通声卡插耳机那当我没说
如果是其他远程软件看片游戏之类😡会报错没有声卡,可以加一个虚拟声卡的代码凑活用,虽然会爆音

-device ich9-intel-hda -device hda-output -audio alsa

最好的的方法还是手动安装虚拟声卡软件virtual-surround-sound,支持7.1哦

禁用VNC

添加DISPLAY变量,值为disabled即可关闭VNC,这样8006端口就无法用浏览器访问了

建议安装完远程软件后,留到最后一步禁用,洁癖...洁癖

隐藏虚拟化过检测

按需添加以下代码

-cpu host,-hypervisor,+kvm_pv_unhalt,+kvm_pv_eoi,hv_spinlocks=0x1fff,hv_vapic,hv_time,hv_reset,hv_vpindex,hv_runtime,hv_relaxed,kvm=off,hv_vendor_id=intel

解释如下:

-cpu host: 使用宿主机的CPU配置。
-hypervisor: 禁用hypervisor特性。
+kvm_pv_unhalt: 启用KVM PV unhalt特性。
+kvm_pv_eoi: 启用KVM PV EOI特性。
hv_spinlocks=0x1fff: 设置spinlock计数器。
hv_vapic: 启用虚拟APIC。
hv_time: 启用Hyper-V时间。
hv_reset: 启用Hyper-V重置。
hv_vpindex: 启用虚拟处理器索引。
hv_runtime: 启用Hyper-V运行时。
hv_relaxed: 启用Hyper-V放松特性。
kvm=off: 禁用KVM。
hv_vendor_id=intel: 设置Hyper-V厂商ID为"intel"。

想咋玩咋玩

远程之类可参考在UNRAID上通过vGPU虚拟化把玩Tesla P4炼丹卡