用Docker部署iVentoy搭建PXE网络批量装机平台全指南
2026/9/15 11:49:23 网站建设 项目流程

相信每个搞运维、做实施、或者家里设备多到需要折腾系统的朋友,都经历过那种“搬着小板凳在机房一台一台装系统”的日子。U盘启动、进BIOS改启动项、加载镜像、分区、等进度条……装三五台还能忍,装二三十台,光是插拔U盘和按键就能让人怀疑人生。后来我接触到PXE网络装机,才知道批量装系统这件事,其实可以做得非常优雅。再配合Docker把iVentoy服务端跑起来,一个“网络装机平台”几分钟就能上线,而且不污染宿主机系统。

这篇文章想和你聊的,就是把这三个关键词——Docker、iVentoy、PXE——串起来,从原理到实操,一步步搭出一个能直接用于生产环境的网络装机平台。我会把我自己部署时踩过的坑、排查问题的思路、以及一些常规文档里不会写的细节都放进来。不管是网管、运维工程师,还是家里有NAS、喜欢折腾软硬件的人,这篇文章都值得你花五分钟读完,然后照着做一遍。

1. 先搞清楚PXE网络装机到底是什么,iVentoy在中间干了什么

1.1 传统PXE装机流程为什么麻烦

PXE的全称是Preboot eXecution Environment,翻译过来就是“预启动执行环境”。它解决的问题很简单:一台连硬盘系统都还没有的裸机,怎么在网络里找到安装源并启动安装程序。

整个流程大概是这样:客户端开机后,网卡固件会先向网络里发一个DHCP广播请求,拿到IP地址的同时,也会拿到“下一步该去找哪个服务器”的信息。接着客户端根据这个信息,通过TFTP协议下载一个引导文件,这个引导文件会拉起一个最小化的Linux环境,然后再从这个环境里加载真正的ISO镜像,最后进入操作系统安装界面。

听上去不复杂,但传统PXE要落地,你得自己维护一堆服务:DHCP服务器、TFTP服务器、HTTP或NFS文件服务器、引导配置文件、菜单文件,还要考虑BIOS和UEFI两种启动模式下引导文件的差异。每个环节都不算难,但组合在一起,出问题的概率就直线上升。我最早搭PXE的时候,光排DHCP和TFTP的兼容性问题就花了两天。

1.2 iVentoy的定位:把PXE服务端打包成“开箱即用”的黑盒

iVentoy是Ventoy的网络版。Ventoy很多人听说过,它能把多个ISO镜像直接塞进U盘,启动时让你选择要引导哪个系统。iVentoy的思路类似,只是把“U盘”换成了“网络启动”,把“插在USB口”换成了“跑在一台服务器上”。

iVentoy天然集成了一套完整的PXE服务端,包括DHCP服务、TFTP服务、HTTP服务,还有一套Web管理界面。你只需要把ISO镜像放到指定目录,它就能在客户端启动时以菜单的形式展示出来,按方向键选择,回车启动,就像在电脑前插了U盘一样。它同时支持BIOS和UEFI启动,也支持Legacy、Secure Boot等场景,甚至可以在启动过程中自动给Windows镜像加载驱动,这些都大大降低了搭建门槛。

刚才说的传统PXE组件,你可以把iVentoy理解成一个“融合怪”服务端,它把DHCP、TFTP、HTTP、引导文件、启动菜单这些杂事全部包住了。使用者的核心工作就两件事:放ISO、开机选菜单。所以我现在给团队做批量装机方案,基本不再考虑手工搭建那套老式PXE。

1.3 为什么还要套一层Docker部署

有人会问:iVentoy官网本身提供Linux版本,直接下载解压就能运行,为什么非要通过Docker?

我的理由有三个。第一,不污染宿主机。iVentoy依赖的运行时环境和一些动态库版本,如果直接装到Linux主机上,很容易和已有的系统组件产生冲突。用Docker容器一包,所有依赖都被隔离了,宿主机还是干干净净的。第二,方便迁移和重建。服务器挂了、要换硬件、要搬家,只要把数据目录里的镜像文件拷出来,再在新机器上执行一次Docker启动,服务马上就回来了,不需要重新配置一遍。第三,很多人的NAS本身就是基于Docker的应用生态,比如飞牛NAS这类系统里跑App最顺手的方式就是Docker容器,iVentoy能容器化,就代表它能和这群人的现有环境无缝融合。

当然,Docker不是银弹。iVentoy这种网络服务对网络模式特别敏感,容器网络怎么配,直接决定你后面会不会踩坑。这一点我会在后面的部署部分重点展开。

2. 部署前的准备:环境、网络、ISO镜像,一个都不能少

2.1 服务器硬件和软件需求

iVentoy本身并不吃资源,它只是一个基于Linux的网络引导服务,CPU和内存占用都很小。但因为它要承担网络引导和镜像发送的任务,所以硬件上还是要满足一些底线要求。

我列一个我实际推荐的环境清单,照着准备基本不会出错:

组件推荐要求说明
服务器CPUx86_64或ARM64架构,1核以上低功耗小主机或NAS都能跑
内存2GB及以上镜像释放和Web管理会占一点内存
磁盘空间至少留出镜像总容量1.5倍有些模式需要把ISO释放成临时文件
操作系统Linux发行版或基于Linux的NAS必须是真实Linux环境,不能是Windows/Mac
Docker版本20.10以上低版本部分网络参数不生效
客户端支持PXE/网络启动的网卡几乎所有商用主板都有

我见过有人在Docker Desktop上试图跑iVentoy,结果卡在“Virtualization support not detected”或者容器启动失败。这里先给大家提个醒:Docker Desktop本质是在Windows或Mac上开了一台虚拟机,PXE的DHCP广播在虚拟机的虚拟网卡里打转,很难到达真实物理网络。如果你只有Windows电脑,建议把它当管理端来用,而不是当iVentoy服务器。

2.2 网络结构:为什么必须同网段,跨网段会怎样

PXE启动依赖DHCP广播,而DHCP广播在同一个二层网络中才能直接被响应。也就是说,iVentoy服务器所在的网段,原则上必须和待装机客户端所在网段一致。

一个最简单的推荐拓扑是这样的:

iVentoy服务器(Docker容器) <- 交换机 <- 客户端电脑

这里iVentoy服务器和客户端连接在同一个交换机下,不做任何VLAN隔离。如果你的企业网络比较复杂,客户端在一个VLAN,服务器在另一个VLAN,那就必须在三层交换机或防火墙上配置DHCP Relay,把DHCP广播转发到iVentoy所在的网段。这个配置很多网工朋友熟悉,但如果你只是家里或小办公室里用,我建议直接把两者放在同一个网段里。

还有一个容易忽略的点:如果现网里已经存在一台家庭路由器或者企业DHCP服务器,iVentoy自带的DHCP服务启动后,网络中就会出现两个DHCP响应源,客户端到底拿到谁分配的IP,完全看谁响应快。如果你不想影响现有网络,就不要轻易开启iVentoy的内置DHCP功能,而是让它使用“现有DHCP”的模式,只提供引导文件服务。我自己的习惯是:单独拉一个用来装机的交换机,把待装机的机器全部接到这个独立网段,再让iVentoy承担DHCP和引导的全部职责,这样对生产网络的风险最小。

2.3 ISO镜像的准备和命名

iVentoy支持的镜像种类非常多,常见的有Windows 10/11、Windows Server、各类主流Linux发行版,甚至包括VMware ESXi这类虚拟化系统。只要你手里有能够正常从U盘启动的ISO,一般都能被iVentoy识别。

准备镜像时要注意三点。第一,镜像文件不要有中文名或特殊字符。虽然iVentoy的Web界面支持中文,但在底层引导菜单里,中文镜像名有时候会出现乱码,导致选择时看得一头雾水。保险起见,统一用英文字母、数字、横线命名。第二,ISO文件直接放到数据目录下的iso子目录里。iVentoy启动时会自动扫描这个目录,生成启动菜单,不需要你手动去改配置。第三,如果镜像特别大,比如Windows Server带了一堆更新,建议提前计算好磁盘空间,至少留出镜像大小的一倍以上,因为iVentoy在准备引导时会做解包和临时释放操作。

3. 动手部署:从拉镜像到启动Web管理后台

3.1 准备数据目录和拉取镜像

我惯用的目录是/opt/iventoy/data,你也可以改成任意路径。先创建目录:

mkdir -p /opt/iventoy/data/iso

然后去Docker Hub搜索iVentoy镜像。这里有一点要提醒:iVentoy官方提供的部署方式更偏向于直接下载Linux安装包,Docker镜像大多是社区或个人维护的,所以镜像仓库名可能会变。你可以在Docker Hub里搜索iventoy,然后选择拉取量比较多、更新时间较新的镜像。下面命令里的镜像名只是一个示例,实际使用请替换成你搜到的镜像名:

docker pull ventoy/iventoy

拉取完成后,先用docker images确认镜像已经存在。有些社区镜像体积比较大,因为内部打包了完整的底层系统,这是正常现象。

3.2 启动容器的关键参数:network host是我推荐的第一方案

iVentoy启动容器时,最重要的不是CPU或内存限制,而是网络模式。我强烈建议你使用host网络模式,而不是默认的bridge桥接模式。

docker run -d \ --name iventoy \ --privileged \ --network host \ --restart always \ -v /opt/iventoy/data:/data \ ventoy/iventoy

如果你用的是NAS或Linux主机,这个命令可以直接执行。解释一下里面每个参数的意义:

  • --network host:让容器直接使用宿主机网络栈,这样DHCP广播、TFTP、HTTP服务都能直接绑定物理网卡,客户端可以顺利找到服务器。这也是避免“客户端拿不到IP”的最关键一步。
  • --privileged:提权模式。iVentoy运行时要绑定低端口、创建虚拟网卡或修改网络接口属性,普通容器权限不够,加上它更稳妥。
  • -v /opt/iventoy/data:/data:把宿主机目录挂载进容器,ISO镜像就在这个目录下,之后升级容器、重建容器,数据都不会丢。
  • --restart always:开机自启,容器挂了自动拉起,这也是跑生产服务的基本配置。

如果你所在的平台不支持host模式,比如某些NAS的Docker管理界面只允许你填端口映射,那你可以退而求其次用桥接模式,把26000、26001、26002这几个默认端口映射出去。但我要提前说一句:桥接模式大概率会遇到DHCP广播不能穿透的问题,这时候不要纠结,优先检查iVentoy是否能以“不接管DHCP”的方式配合现有DHCP服务使用。

还有一个容易被新手忽略的问题:host模式下,你的容器端口和宿主机端口是共用的,如果之前已经有服务占用了iVentoy默认要用的端口,容器就会启动失败。启动后建议立刻看一下日志:

docker logs -f iventoy

如果日志里出现Address already in use,说明端口冲突了,用ss -lntup | grep 26000去看是哪个进程占用了端口,再调整iVentoy的端口配置或者释放占用。

3.3 登录Web管理后台,切换语言并验证状态

容器启动成功后,直接在浏览器里访问:

http://你的服务器IP:26000

iVentoy默认的Web管理端口是26000。打开后你会看到一个非常简洁的管理页面,里面能看到当前iVentoy服务运行状态、模式、DHCP设置等。右上角或设置区域一般可以切换中文界面,我建议一开始就切成中文,免得后面对着英文看花眼。

然后,把你准备好的ISO镜像文件上传或复制到/opt/iventoy/data/iso目录里。如果你是通过Web界面上传的,上传完成之后iVentoy一般会自动刷新镜像列表;如果是手动复制进去的,稍等几秒,在镜像列表区域点一下刷新,就能看到新出现的镜像条目。

这时候整个服务端就已经搭建完毕了。你不需要再安装Nginx、dnsmasq、tftp-hpa等任何额外组件,也不需要手动写PXE菜单配置,iVentoy已经把所有引导文件都内置好了。这也是我为什么建议团队直接切到iVentoy的原因——之前维护那套老PXE环境,光是配置菜单就够喝一壶。

4. 客户端实战:从PXE启动到安装界面,完整走一遍

4.1 客户端怎么设置网络启动

服务端准备好了,接下来要看客户端。先把待装系统的电脑接上网络线,开机,按快捷启动键进入启动菜单。不同品牌的主板快捷键不太一样,常见的如下:

品牌/设备快捷启动键
戴尔F12
惠普F9
联想F12
华硕F8
微星F11
技嘉F12

进入启动菜单后,找到类似“Network Boot”或“PXE Boot”或“IPv4 Network”的选项,回车。如果你在BIOS里找不到网络启动,那就进BIOS设置,在Boot选项里把“网络启动”或“Onboard LAN Boot”设为Enabled,然后把启动顺序调到第一位。

还有一点值得注意:UEFI模式的主板通常会要求Secure Boot保持关闭或处于兼容模式,否则PXE引导文件会被卡住。我后面会专门讲这个问题。

4.2 进入iVentoy引导菜单后该做什么

客户端从网络启动之后,会先看到一段初始化画面,然后进入iVentoy的启动菜单。这个菜单和Ventoy U盘启动菜单很像,背景是个简单的蓝色或黑色界面,列表里显示的就是你放进iso目录里的所有镜像。

用方向键选择你想装的系统镜像,按回车确认。这时候iVentoy会在后台准备这个ISO,如果ISO文件比较大,你会在界面上看到加载进度或等待提示。很多第一次用的人会以为卡死了,其实不是,它是在做镜像准备的最后工作。

等进度走完,客户端会正常进入对应安装程序。比如你选择了Windows 11的ISO,那么接下来就会看到Windows的安装界面;选择Ubuntu的ISO,就会进入Ubuntu的Live安装环境。整个过程就跟把U盘插在电脑上效果一样,只不过数据源变成了网络。

4.3 用Windows镜像和Linux镜像时的不一样的细节

Windows和Linux虽然都能通过iVentoy启动,但还是有一些细节需要注意。

对于Windows安装,最容易翻车的是“安装过程中找不到硬盘”。现在很多新机器默认开启Intel VMD/RST模式,Windows原版安装镜像里没有对应驱动,磁盘根本显示不出来。解决办法是把厂商提供的IRST或VMD驱动打包成一个ISO,也放到iVentoy的镜像目录里,然后在Windows安装界面加载驱动时选择那个ISO文件。如果你在公司批量装机,这一步几乎是必经之路。

对于Linux安装,大部分主流发行版都能很顺利地从iVentoy启动。不过建议优先选择官方原版的ISO,而不是第三方封装的Ghost版或精简版,因为iVentoy对原版镜像的兼容性最好。另外,如果想做无人值守安装,Linux的preseed/kickstart自动应答文件可以和命令行方式配合,但这一步取决于你对系统安装的了解程度,第一次使用建议先手动走一遍流程,确认网络引导没问题了再设计自动化。

4.4 批量装机时的节奏控制

当你确认单台机器可以正常通过网络引导安装后,就可以考虑批量了。我的建议是不要一上来同时开几十台,先同时启动3到5台,观察iVentoy服务器端的网络负载和镜像释放情况。

批量装机时,同一个ISO会被多个客户端同时读取,如果iVentoy服务器磁盘性能一般,比如是一块普通机械硬盘,那网络引导速度会明显下降,所有客户端都会变慢。这时候尽量把数据目录放在SSD上。家里用飞牛NAS这类设备跑Docker的话,也尽量把/opt/iventoy/data挂载到固态硬盘存储池里,而不是老旧的机械盘上。

另外,批量环境建议单独划分一个装机网段,避免大量PXE广播影响办公网络里的正常设备。装完一台,拔掉网线或改回正常启动盘,再去装下一批,这样整件事会可控很多。

5. 常见问题与故障排查实录

5.1 客户端完全拿不到IP

这是PXE部署里最经典的问题,没有之一。表现是客户端开机后卡在网络启动阶段,过一会提示“No boot filename received”或者直接超时。

排查思路按顺序来:

第一步,确认iVentoy服务器与客户端网络互通。在服务器上ping一下客户端,或者在iVentoy的Web后台看有没有新客户端MAC地址记录。第二步,确认网络里是不是存在多个DHCP响应。如果有两个DHCP服务器,客户端拿到的IP可能是家里路由器分配的,而不是iVentoy分配的。此时要么关闭iVentoy的内置DHCP,要么把这段网络和现有路由器隔离。第三步,检查防火墙。host模式下,iVentoy的DHCP请求会占用UDP 67和68端口,如果你的NAS或Linux服务器开了防火墙,需要放行这些端口。我用Firewalld的话,会执行类似这样:

firewall-cmd --permanent --add-port=67/udp firewall-cmd --permanent --add-port=68/udp firewall-cmd --permanent --add-port=69/udp firewall-cmd --permanent --add-port=26000/tcp firewall-cmd --reload

具体端口以你的iVentoy实际使用为准,把26000附近的TCP端口和67、68、69这些UDP端口都放行,就基本覆盖了PXE所需服务。

5.2 PXE引导卡在“Downloading NBP file”或者加载时间过长

如果客户端能拿到IP,说明DHCP正常,但卡在下载引导文件阶段,那大概率是TFTP服务出了问题。TFTP默认走UDP 69端口,有些Docker封装的镜像可能把TFTP端口改成了26001之类的自定义端口,所以关键还是要看镜像文档和Web后台设置。

另一个常见原因是客户端和服务器不在同一网段,DHCP由其他网络设备应答,TFTP请求又被防火墙挡在了中间。你可以用tcpdump在服务器上抓包确认:

tcpdump -i eth0 udp port 69 or udp port 26001

如果服务器上完全抓不到TFTP请求包,说明请求根本没到服务器,问题出在网络路由或DHCP返回的next-server地址不对。如果抓到了但一直重传,说明TFTP传输被中断,优先查防火墙丢包。

5.3 UEFI模式启动失败,Secure Boot惹的祸

现在的电脑基本都是UEFI启动,PXE在UEFI模式下已经和过去Legacy模式大不相同。最典型的表现是客户端能进入PXE菜单,但选择ISO后黑屏,或者报“Verification failed: (0x1A) Security Violation”。

这个几乎可以确定是Secure Boot在拦截引导文件。解决方法不复杂:开机进BIOS,找到Secure Boot选项,把它设为Disabled或换成“Other OS”模式,保存重启。iVentoy新版对Secure Boot的支持越来越好,但毕竟它是通过网络加载自定义引导文件,最容易受Secure Boot策略影响。企业环境如果安全策略强制要求Secure Boot,那你需要确认iVentoy和镜像版本都足够新,并且测试过对应启动链。

另外,有些主板支持“PXE IPv4”和“PXE IPv6”两种选项,除非你明确要测试IPv6,否则一律选IPv4,能少很多莫名其妙的问题。

5.4 Windows安装时找不到硬盘

前面提过,Windows镜像无法识别磁盘,90%是VMD/RST驱动问题。具体表现是进入Windows安装程序后,磁盘列表为空,或者只有“未分配空间”但看不到实际硬盘。

解决办法就是准备驱动。去设备厂商官网下载对应机型的Intel RST或VMD驱动,用UltraISO等工具把驱动文件打包成一个新的ISO镜像,放到iVentoy的镜像目录里。等到Windows安装界面停在“找不到驱动器”时,点“加载驱动程序”,浏览到那个驱动ISO所在的光驱,加载完成后硬盘就出来了。

这里有个操作小技巧:如果你在iVentoy启动菜单里选择了Windows镜像,又准备了一个驱动镜像,可以先把驱动镜像放到iso目录旁边,然后在Windows安装到需要驱动时,iVentoy的数据目录依然是可以访问的网络位置吗?不一定。为了省事,我更推荐直接把驱动合入安装镜像,或者提前在BIOS里把SATA模式从RST改为AHCI。只要BIOS里能切,那就优先切AHCI,最稳妥。

5.5 容器日志权限报错:privileged和网络权限问题

有时候容器能启动,但客户端就是无法引导,翻看docker logs iventoy会发现类似Permission deniedCannot bind to port 67这样的报错。这通常是因为容器没有足够的权限去操作网络接口或绑定特权端口。

解决办法很简单:删掉旧的容器,重新用--privileged参数启动。如果你是在NAS的Docker管理界面里配置,没有privileged开关,那就需要去命令行操作或者检查该NAS是否支持特权容器。这里也给一个小建议:容器跑稳了之后,不要每次修改都重新手动执行命令,把参数写成一个Docker Compose文件,以后升级或者换机器,直接通过Compose文件一键拉起,比在命令行里重新敲一遍安全得多。

6. 实际操作心得:让这套平台真正好用起来的几个建议

整套流程跑通以后,我再分享几个我实际使用中觉得很值得注意的点。

第一,数据目录一定要独立。把/opt/iventoy/data放在系统盘之外的单独分区或存储池里,这样就算Docker容器坏掉了、镜像重新拉取、宿主系统重装,只要这个数据目录还在,恢复成本几乎为零。我自己习惯把ISO目录再按照Windows、Linux、驱动工具分成子目录,虽然iVentoy的菜单展示不分层级,但你在后台维护时清晰很多。

第二,不要盲目追求最新版镜像。iVentoy的Docker镜像版本更新频率不固定,有些新版可能改动默认端口或引导逻辑。如果你手里的iVentoy已经跑得很好,优化过防火墙规则,别随意升级。真要升级,先拿一台测试机验证,再决定要不要全局替换。

第三,理解你手里的镜像文件。iVentoy只是“搬运工”,它帮你把镜像通过网络引导起来,但镜像里的自动应答、默认语言、驱动集成,这些都是安装包本身决定的。你把镜像解决了,整个网络装机的体验才会顺滑。

第四,这套方案不只是给服务器用的。在家里,利用一台跑Docker的NAS装好iVentoy,以后给亲戚朋友修电脑、重装系统,都不用再做启动盘。电脑插上网线、开机选一下菜单,就能进入Windows安装界面,过程比U盘还方便。我后来甚至直接给NAS接了一台带外管理的小交换机,专门留给上门维修场景,几十台设备的批量部署和人性化折腾都变得干净利落。

最后说一句我踩过最深的坑:第一次部署时图省事用了桥接网络模式,结果客户端能ping通服务器,PXE却一直卡在DHCP阶段。后来换成host网络模式,所有问题都消失了。如果你也遇到类似问题,不要去怀疑镜像、怀疑ISO文件,先从网络模式开始排查——这一条值得记在备忘录里。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询