在拾光坞G2上使用Docker-QEMU运行Windows虚拟机

2025-07-08 15:56:29 2点赞 5收藏 0评论

hi,大家好,我是拾小咖

拾光坞G2双盘位私有云,作为一款N150的X86 NAS,它拥有强大的性能,友友们可不要浪费了呢!今天就给大家带来一个玩法,通过Docker-QEMU,部署一个Windows虚拟机的教程。可以帮你实现:

✅ 直接跑起Windows虚拟机
✅ 轻松拿捏远程办公等
✅ NAS秒变“微数据中心”

以下内容感谢@浪迹天涯大叮当 在拾光坞社区(点击文章最下方阅读原文可跳转)带来的分享:

前言

G2作为拾光坞的x86新品,其拥有比N3更广泛的软硬件兼容性和更强的性能表现。虽然拾光坞N3凭借ARM架构和Docker支持已经能够实现丰富的功能,但G2的x86架构、对KVM虚拟化技术的支持和更高的计算能力让运行Windows虚拟机成为可能。

接下来,我们将一步步配置虚拟化环境,通过Docker-QEMU,部署一个Windows虚拟机,继续压榨发挥G2的性能!
预估难度:★★★★☆

一、准备工作

>1. 准备工具

现G2暂未推出官方的虚拟机套件,本次部署需要用到SSH和Portainer
开始正式部署前,我们需要先开启并连接G2的SSH,并准备好Portainer(如果你打算直接用docker run指令就不需要啦),以便后续管理和部署
连接SSH和部署Portainer可看这篇文章:
在G2的Docker中部署Portainer图形化管理Docker

>2. 准备Macvlan网络

通过Macvlan网络,虚拟机可获得属于自己的独立IP及更全面的上网权限,因此在开始部署前我们先创建一个Macvlan网络。

登录新版拾光坞客户端,找到首页 云盘信息

图片.png图片.png


确定当前云盘使用的网口,并记住后方第一行的 网络类型:

图片.png图片.png


使用SSH连接G2,输入 ifconfig 并回车。找到对应行,记住划线部分(inet addr)后的IP。常见的有 192.168.0.xxx,192.168.31.xxx 这类内网IP,记住它的格式。

图片.png图片.png


我们也需要确定当前网络环境下的网关地址。一般为内网IP段的第一个IP(如192.168.0.1,192.168.31.1)。不确定的可在 云盘信息 里看到:

图片.png图片.png


回到SSH,输入以下命令,获得一串随机的IPV6内网地址段。复制输出的结果:

printf ‘fd%x:%x:%x::/64n’ $((RANDOM%256)) $((RANDOM%65536)) $((RANDOM%65536))

图片.png图片.png


随后即可创建我们的Macvlan网络。

根据实际情况,输入以下指令:

sudo docker network create -d macvlan --subnet=[你的IPV4内网IP前三位].0/24 --gateway=[网关地址] --ipv6 --subnet=[刚刚获得的地址段] --gateway=[删除地址段后/64换为1] -o parent=[使用的网口] [网络名称,随便取]

举个🌰:若我的G2使用的网口为 eth1,内网IPV4地址为 192.168.31.152,网关地址为 192.168.31.1,生成得到的地址段为 fd38:2798:3318::/64,想给网络取名为 virt-macvlan。则我的指令应该是这样:

sudo docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.1 --ipv6 --subnet=fd38:2798:3318::/64 --gateway=fd38:2798:3318::1 -o parent=eth1 virt-macvlan

图片.png图片.png


回车后若未出现报错则创建成功。输出的一串随机字符为网络id,不用管。打开Portainer,在首页查看现有的Docker网络:

图片.png图片.png


看到我们刚刚创建的Macvlan网络则成功:

图片.png图片.png

>3. 准备系统镜像

虽然qemu-docker可以自行拉取指定版本镜像,但不同网络环境下速度可能不稳定。为了方便和更多自定义性,我们先把镜像下载到本地
使用微软官方Windows镜像即可。考虑到云盘性能有限,推荐 Windows 10 LTSC 版。下载链接附上

magnet:?xt=urn:btih:366adaa52fb3639b17d73718dd5f9e3ee9477b40

将镜像下载到本地,重命名为 boot.iso

>4. 准备数据文件夹

在本地任一位置新建一个文件夹,取名为 Windows。

图片.png图片.png


注意文件所在存储盘位:

图片.png图片.png


将下载得到的 boot.iso 文件放入其中 Image 子文件夹中:

图片.png图片.png


二、部署docker-windows

>1.拉取镜像

打开拾光坞PC端,进入 容器服务:

图片.png图片.png


点击右侧 镜像商店:

图片.png图片.png


搜索并拉取 dockurr/windows:

图片.png图片.png


导入完成后回到Portainer,在左侧 Image 栏能找到它就行。

图片.png图片.png



图片.png图片.png

>2. 部署容器

点击左侧 Containers 栏:

图片.png图片.png


点击右侧 Add container 按钮新建容器:

使用docker run命令可跳过下列步骤,新手建议还是使用Portainer图形化部署:

sudo docker run -d --name uvm_Windows --network [Macvlan网络名] --ip [自己取个IPV4内网IP] --device=/dev/kvm --device=/dev/net/tun --device=/dev/dri --cap-add NET_ADMIN -v “/mnt/usb[1,2…]/[用户名]/[数据文件夹位置]”:/storage -v “/mnt/usb[1,2…]/[用户名]/[数据文件夹位置]/Image/boot.iso”:/boot.iso -e RAM_SIZE=6G -e CPU_CORES=4 -e DISK_SIZE=256G -e DHCP=Y -e MANUAL=Y -e GPU=Y -e VERSION=10l --stop-timeout 120 uvm_dockurr/windows:latest

其中 usb[1,2…] 后跟的数字取决于数据文件夹所在盘位,主分区为usb1,其他盘位可在手机app磁盘管理中看到:


微信图片_20250618152030.jpg微信图片_20250618152030.jpg

未填项和 RAM_SIZE 等性能相关环境变量根据实际情况填写即可:

图片.png图片.png


随后开始配置容器,容器名称随便填,但要在取好的名字前加上 uvm_ 前缀:

图片.png图片.png


镜像部分直接填入 uvm_dockurr/windows:latest

图片.png图片.png


端口设置(Port mapping)部分不用填,因为我们直接使用Macvlan网络:

图片.png图片.png


接下来来到页面下方 高级容器设置(Advanced container settings)部分:

图片.png图片.png


第一页 Commands&logging 在 Logging 字样下方的下拉框中选择 json-file ,并在其下分别新建选项 max-file 取值为 3,max-size 取值为 10m。其作用是方便云盘读取日志信息,并限制日志文件大小。

图片.png图片.png


第二页 Volumes 部分填写路径映射。新建两项:

第一项为数据文件夹,第一行填容器内路径,为 /storage;在其右侧选择 Bind;下方填写数据文件夹路径,为 /mnt/usb[1,2…]/[用户名]/[数据文件夹位置];在其右侧选择 Writable

第二项为启动镜像,将子文件夹中的 boot.iso 挂载至容器内 boot.iso 即可

usb[1,2…] 后跟的数字取决于数据文件夹所在盘位,主分区为usb1,其他盘位可在手机app磁盘管理中看到

图片.png图片.png


第三页 Network 部分中,第一行选择我们新建的Macvlan网络;IPv4 Address 行选填,希望指定虚拟机获得的IPV4内网IP可填一个
未被其他设备占用的地址。
注:此处指定的地址主要用于虚拟机安装过程中通过vnc网页访问图像输出,网页输出清晰度低且无法输出音频和绑定键鼠。部署完成后Windows系统自己会再通过DHCP获取一个IP地址,可通过RDP远程桌面连接。

图片.png图片.png


第四页 Env 部分中,新建以下几个环境变量:



变量名

取值

说明

CPU_CORES

4

虚拟机获得的CPU核数,不得超过宿主机

RAM_SIZE

自定,保守点可以4G

虚拟机获得的内存大小,虚拟机启动后就会全部占用

DISK_SIZE

自定,推荐128G+

虚拟机获得的磁盘大小,会随着使用逐渐分配,不会一次性占满

DHCP

Y

允许虚拟机通过DHCP获取独立IP

MANUAL

Y

手动进行系统安装,建议开启

GPU

Y

使虚拟机共享主机的GPU,不需要可不填此项

TZ

Asia/Shanghai

使虚拟机使用中国时区

LANGUAGE

Chinese

使虚拟机使用中文

VERSION

10l

指定当前镜像版本为 Win10 LTSC

Labels 部分不管。
Restart policy 部分建议Never,这样虚拟机就可随Windows系统关机而关闭:


图片.png图片.png



Runtime&resources 部分直接按图中填:

其中 Memory limit 部分建议填比分配给虚拟机内存大500MB的内存限制(如环境变量中分配 6G 则填 6656),因为虚拟机服务本身需要占用额外资源。

图片.png图片.png


最后 Capabilities 部分将 NET_ADMIN 打开。

图片.png图片.png


完成后点击 Deploy the container 部署虚拟机,虚拟机随即启动:

图片.png图片.png


三、 配置并使用Windows

>1. 在Portainer中点击部署好的容器进入详情页。

图片.png图片.png


滚动到最下方,确定虚拟机框架当前获得的内网IP地址:

图片.png图片.png


>2.浏览器输入IP地址并访问,看到以下界面即成功。虚拟机框架正在加载镜像:

图片.png图片.png


如果选择了共享GPU,则虚拟机还会下载对应依赖,可能用时稍久。

图片.png图片.png


>3.随后跟随Windows安装向导完成安装,即可看到系统:

图片图片

已经装了点东西了哈哈。打开网络与共享中心,可看到虚拟机已获得独立IP:


图片.png图片.png


使用Windows自带的远程桌面工具(或其他RDP工具)输入IP即可连接,效果好上不少。

图片.png图片.png



图片图片


四、可能遇到的问题和提示


>1. 由于Macvlan网络的特殊性,虚拟机无法直接与G2通过内网IP的方式通讯。如需访问,可配置转发。

>2. G2默认自带的8G内存还是小了点,有条件的可以自己换内存(DDR4的笔记本内存)。

>3. 部署好并命名标准的虚拟机容器通过拾光坞客户端也可见,可通过客户端进行开启、关闭等操作,然而强烈建议在虚拟机内使用Windows关机以确保系统和数据安全,同样设置妥当的话容器也会一同关闭。

图片.png图片.png


>4. 除非存在限制,否则仍推荐使用拾光坞提供的Docker管理工具。

>5. 现G2虚拟机网络相关环境还不全,使用macvlan方式会出问题,建议使用bridge或host模式
bridge下将容器内8006及3389TCP和UDP端口映射出去,也可根据需求新增端口映射。端口映射配置失败的可先用host模式创建容器,完成虚拟机初始化和装机后通过拾光坞客户端修改容器配置为bridge模式并映射相关端口即可
使用bridge和host网络时环境变量部分不需配置“DHCP=Y”;Runtime&resources 中的 device 部分不需填写 /dov/vhost-net 项


展开 收起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
5
扫一下,分享更方便,购买更轻松