type
status
date
slug
summary
tags
category
icon
password
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2F8ac5c298-8d07-4364-b4d0-bf37e5cbec31%2FUntitled.png?table=block&id=c14e8459-e81b-4095-8188-03018a4fc046)
前几天有位朋友告诉我,CA 里面出了一个可以安装 Win 系统在 Docker 容器中的项目,我看了眼感觉挺有意思,就把安装过程和一些注意的点写下来给到大家参考。
1. 适合轻度应用
由于 Win 系统是运行在 Docker 容器中,相比于虚拟机的形式会有不少的限制,例如无法选择 Machine 类型(i440fx / Q45)、无法像虚拟机那样直通 PCIE 设备(vfio-pci)、由于容器的原因会造成一定的性能损耗等等。
因此,如果你希望正经的使用 Windows 系统虚拟机,建议你不采用 Docker 安装的形式进行使用;相反,如果你只是希望能快速部署一个 Windows 系统用来做一些轻度的使用(如做测试、跑一些简单的脚本或程序等),那么此方法会比较适合你。
2. 获取 XML 模板
你可以直接在 APPS 中搜索和安装
WindowsinDocker
,不过我建议读者可以通过博主修改过的 XML 模板进行配置和安装,复制和粘贴以下命令到 Unraid 的命令行窗口中运行来获取 XML 模板文件:运行命令之后添加 Docker 容器:
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2Faadd5e2d-36c7-43fb-b36d-73df7d88e196%2FUntitled.png?table=block&id=a5f16a7f-a481-4cae-b4d1-3b313d5b039e)
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2Fadab9830-b7fe-4306-b461-f4bb4bcfc4d1%2FUntitled.png?table=block&id=1f31ff80-65ca-4c0c-83e6-af554ce52c77)
3. 安装参数详解
通过查看该 Github 项目的说明以及相关 issues 信息,我将可能用到的相关容器变量和一些必要的说明都添加到了 XML 模板中,由于参数比较多,所以大家请根据自己的实际情况来调整,我会尽可能说明每一个参数的作用和使用方法。
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2F6b7861d1-11a3-4f35-83ef-50b64a52afcc%2FUntitled.png?table=block&id=1f5afa3b-187e-455c-9356-d08cf8e7efd1)
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2F1b237349-5795-4a6f-9459-3ce6ad1b196c%2FUntitled.png?table=block&id=ac9feb4e-f57f-4d5e-9177-d9504cb5da3f)
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2F15456921-b194-4c1d-85d7-a4a8893a1658%2FUntitled.png?table=block&id=b6c5053f-4cf1-4d78-b1ca-9a9fd7f5dca2)
- 额外参数:用于 Docker 容器相关功能的配置。如果你需要将 Unraid 上的 CPU 核显给到虚拟机去使用,那么你可以在额外参数的末尾追加
--device=/dev/dri
,同时将第 14 项参数GPU
的值设置为Y
来为核显添加相应的驱动。
但由于项目刚出来不久,GPU 在容器内的使用不一定能够正常,具体请看文章末尾的问题说明。
VERSION
:用于指定下载什么版本的 Windows 系统,支持的有以下几种值:win11
= Windows 11win10
= Windows 10win81
= Windows 8.1win22
= Windows Server 2022win19
= Windows Server 2019win16
= Windows Server 2016
这里不建议使用容器默认下载的 Win 版本,所以这里变量的值可以不填或者保持默认,在后面的VERSION
变量中可以通过填写 http 下载链接的形式下载指定版本的 ISO 系统安装文件。
- KVM :值为
/dev/kvm
,用于虚拟化加速,不需要改动,保持默认即可。
- WebUI 端口
8006
:用于网页访问,你可以将8006
改成别的值,后续的安装和操作可以通过浏览器访问http://ip地址:8006
进行。
- 远程桌面
3389
端口: 用于远程桌面,可以将其更改为别的端口好,一般保持默认即可。
CPU_CORES
:CPU 核心数,填入整数数值。
RAM_SIZE
:内存容量,输入4G
6G
8G
等数值
DISK_SIZE
:Win 虚拟硬盘容量大小,模板默认的数值是64G
,可以更改为其他的值。
/storage
:容器内部的/storage
路径是 Win 虚拟机读取 ISO 和虚拟硬盘文件的目录,你需要将其映射到 Unraid 的宿主机绝对路径上,模板上默认的路径是/mnt/user/WinInDocker
,你可以将路径更改为别的地方。
stop_grace_period
:等待 Win 系统关机的等待时间,默认是 2 分钟,时间超过 2 分钟后即使 Win 没有完成关机 Docker 也会强制关闭。
MANUAL
:是否手动安装,默认值为Y
(是)。这里建议大家都将值设置为Y
,表示通过手动安装的形式进行系统安装。
VERSION
:指定 ISO 镜像的下载路径。你可以将你希望进行使用的 Windows 系统的下载地址复制到这里,Docker 在启动之后就会通过此链接地址下载 Windows 系统进行安装,更具体的说明请看下文的 4. 如何安装其他版本的 Windows 系统 。
DEVICE
:可以通过这里的设置将硬盘添加到 Win 虚拟机中进行使用,格式可以为/dev/sdb
,或者为了保险起见可以使用/dev/disk/by-id/ata-xxx_xxxxx
格式来实现,不清楚是什么意思的请不要填写。
GPU
:是否将核显给到 Win 虚拟机使用,Y
表示是,N
表示否。
DISK_FMT
:虚拟硬盘格式。这里可以选择两种格式 ——raw
和qcow2
,如果你遇到安装过程中无法分区的情况,请尝试使用 raw 格式,关于无法分区的问题请看文章末尾的问题说明。
ALLOCATE
:配合上面的DISK_FMT
参数使用,如果DISK_FMT
中设置的是raw
格式,那么这里的值需要设置为N
。
4. 如何安装其他版本的 Windows 系统
默认情况下如果不指定其他版本的 Win 系统,容器会自动下载并安装由容器作者所指定的版本,由于作者是国外的,所以下载的也是英文版的官方 Windows,虽然安装好之后可以通过更改语言来使用,但是考虑到国内大多数用户要么习惯用一些非官方的版本,要么习惯通过第三方的网站下载 ISO 文件,所以我建议大家不去使用容器默认的方式去下载 Windows 安装镜像,你可以通过下述两种方式进行下载。
4.1 通过下载指定的 ISO 系统镜像进行安装
假如你希望安装其他地方的系统镜像,你可以在
VERSION
变量中输入 ISO 镜像的下载地址,例如:![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2Fe4849531-18c8-4e70-86d4-ad8d1c8c2d10%2FUntitled.png?table=block&id=6a88ea79-2354-4438-8cb0-a773bf3f9936)
Win 系统的下载地址可以从微软官方获取,或者读者也可以从博主的软件仓库中获取:
作者仓库中的这些 Win 系统镜像也是从微软官方获取而来,请大家放心使用。
![目前包含了 Win11 专业版和 Win10-LTSC 的官方安装镜像](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2Fd9278d74-bd93-4a6c-9b64-15d124001666%2FUntitled.png?table=block&id=fe345214-24bc-4e99-b3d0-7c575a6a4942)
![复制链接地址](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2F345e5cd0-beff-45e0-966f-219a89b83d73%2FUntitled.png?table=block&id=54b4533b-0c1a-44ae-8220-0f79380522b8)
4.2 通过使用已有的 ISO 系统镜像进行安装
如果说你已经下载有了相应的 Win 系统 ISO 安装镜像,那么你可以按照下面的方法将让 Docker 去使用已有的镜像进行安装而不是使用下载链接进行下载并安装:
- 重命名 ISO 文件:首先,你需要将已经下载好的
.iso
镜像文件进行重命名,将文件名字更改为custom.iso
。
- 上传到 Unraid :然后,将
custom.iso
文件上传到容器内部/storage
路径所对应的 Unraid 存储路径,假如说这个路径是/mnt/user/WininDocker
,那么就将文件放到这个目录下。
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2F9d11e36b-5d28-4631-bd13-1cc21d4ed784%2FUntitled.png?table=block&id=148c981f-5c81-4286-a834-d925b193cddc)
- 删除多余文件:删除先前安装过的、残留下来的其他文件,只保留
custom.iso
。
- 更改变量值:将
VERSION
变量的值改为custom.iso
:
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2F0fc00a6a-c107-4140-ba5b-3fc2123c2a42%2FUntitled.png?table=block&id=e564d37d-4c2b-4dab-9dbd-e28cadb857ca)
最后运行容器进行安装即可。
5. 手动安装说明
默认情况下容器会自动帮你安装 Windows 系统,如果你希望手动进行安装,那么你需要将
MANUAL
参数设置为 Y
,这样你在安装的过程就跟在虚拟机上安装的过程是一样的。相信大家也都安装过 Win 虚拟机了,所以我也不过多赘述具体的手动安装过程,不过可能个别新手朋友还不是很清楚,所以我提供一些截图给到给我去参考。
![点击左下角的“加载驱动程序”](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2F8cc5abad-adc2-4d43-8cf6-6ad4cba134e5%2FSnipaste_2024-01-19_21-08-33.png?table=block&id=b8dc970c-9998-42ef-9294-698ab704c8c3)
![vioscsi → win10 / win11 → amd64](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2F1d46398f-ceda-43ba-8943-03e83c819f12%2FSnipaste_2024-01-19_21-07-35.png?table=block&id=7916199d-04d0-459f-aef6-120c7254d171)
vioscsi
→ win10
/ win11
→ amd64
![点击右下角“下一步”开始加载 Virtio 虚拟机虚拟硬盘驱动](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2F2f0768b0-9b4d-46df-bc13-94fdadfb24a9%2FSnipaste_2024-01-19_21-07-49.png?table=block&id=0e2c53eb-e9ea-42c5-b0b7-f6e9813a18c5)
6. 问题说明
Q:安装的时候无法分区该如何解决?
A:如果你在安装的时候遇到了无法分区的情况,如下图所示:
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2Fb6aed0db-40a7-4de6-bb08-360bf2e3f4ca%2FSnipaste_2024-01-19_21-08-57.png?table=block&id=f47a68ea-bc69-41c8-aee3-946738a5143c)
那么有可能是由于使用了
qcow2
虚拟硬盘格式问题造成的,你可以尝试删掉除了 ISO 镜像文件以外的其他残留文件,然后将 DISK_FMT
和 ALLOCATE
变量的值分别设置为 raw
和 N
,然后再重新进行安装。![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2Fc18aa0ee-eab4-46c4-a0a3-79bfff7f0d74%2FUntitled.png?table=block&id=9669b107-123b-461a-8443-c59dfa6cb3c4)
如果经过上述的尝试还是不行,那么你还可以通过尝试将
/storage
的路径映射修改为 /mnt/disk1/xxx
或者 /mnt/cache/xxx
之类的地址,以此来绕开 Unraid 的 SHFS 文件系统,而不是使用 /mnt/user/xxx
:![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ecb05fe-5171-41c0-b920-80b643817327%2Fbea2b6fb-5c40-4164-9e15-b7fbba167782%2FUntitled.png?table=block&id=73bf747c-a8f8-40e4-b631-5aebe42d05ba)
Q:核显添加到容器后不能正常使用
该项目的作者目前也说明了核显在容器中不能正常被 Windows 使用,其中涉及到的技术问题比较复杂,而且由于该项目也是刚刚出来没多久,所以还有不少地方在等待优化。
除了核显之外,Nvidia 显卡等相关 GPU 设备的讨论可以在这个 issues 这查找到相关的信息:
GPU Passthrough
Updated May 23, 2024
- 作者:JackieWu
- 链接:https://www.jackiewu.top/article/windows-in-docker
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。