
家里这台小米万兆路由器上岗之后干得最多的活儿不是跑满万兆内网反而是待在弱电箱里默默跑Docker容器。起因很朴素一块淘汰笔记本上拆下来的2.5英寸机械硬盘一直在抽屉里吃灰加上前几年买过的云盘会员到期后没再续几十G的文档和照片散落在三台设备上找起来相当痛苦。于是我把目光投向了这台常年通电、自带万兆网口、内存还不算小的小米万兆路由器——与其再花两三千块搞一台NAS不如先用Docker在路由器里装一个可道云(Kodexplorer)私有网盘把家庭轻量数据共享这件事跑起来。这篇文章会把从开启Docker、准备外置存储、创建可道云容器到调优和解决运行一个月后遇到的各类问题的完整过程都整理出来。适合手里正好有支持Docker的小米路由器、又不想为轻度网盘需求额外添置硬件的人参考也适合刚接触Docker、想找一个轻量容器练手的朋友照着操作。整篇文章的核心思路就一句话路由器这种低功耗常驻设备不用来跑私有网盘属实可惜但选对软件、规划好存储路径、把坑提前避开才能真正稳定用起来。1. 部署前先想清楚路由器做网盘的边界在哪1.1 小米万兆路由器的Docker到底能做多重的活儿小米万兆路由器定位在高端家用路由它的硬件底子决定了它不是一个全功能NAS但扛住轻量容器完全没问题。你要先建立这个预期Docker环境运行的是像可道云这类轻量应用做文件存储、在线预览、相册备份很合适但如果想在上面跑GitLab、视频转码服务、大型数据库这类重负载任务CPU和内存很快会吃紧发热量也会让你心里没底。我个人的体会是把路由器Docker当作“常驻在弱电箱里的轻量服务器”来用心态就对了。它最大的优势有两个第一7x24小时在线家里网络不断它就不断比开着台式机当网盘要省电得多第二不占额外空间、没有风扇噪音功耗只有几瓦到十几瓦整体成本几乎为零。一个很直观的对比是一台入门级NAS的起售价往往在一千块以上而且同样是ARM架构、同样是低功耗设计性能未必比这台路由器的处理器强多少。所以只要应用选得足够轻这条路完全走得通。1.2 可道云Kodexplorer为什么比Nextcloud更适合路由器市面上的私有网盘方案不少常见的是Nextcloud、ownCloud、可道云(Kodexplorer)和它的新版本KodBox。很多人一上来就想着上Nextcloud因为它名气大但这里我强烈建议路由器场景优先考虑可道云原因有两点。一是依赖复杂度。Nextcloud不是单纯一个PHP应用它还需要搭配数据库MySQL/MariaDB或PostgreSQL、Redis缓存等组件Docker部署时往往要同时起三四个容器对路由器的内存和闪存都是不小负担。而可道云Kodexplorer的开源版是一个单容器应用核心程序只依赖PHP运行环境不需要外部数据库文件索引直接走文件系统部署和迁移都极其简单。二是资源占用。可道云Kodexplorer镜像体积小运行内存占用通常在几百MB以内和一台同时跑数据库Web服务的Nextcloud容器组相比压力小得多。至于KodBox——它是可道云的新一代产品界面更现代、功能更丰富但底层依赖更多镜像也更大放在路由器上明显不如Kodexplorer轻盈。对路由器这种内存按GB算、闪存可能只有几个GB的环境来说“够用且轻”是第一原则。1.3 开工前的硬性条件清单如果你想复现这个方案先对照一下手里的条件一台支持Docker的小米路由器常见的是小米万兆路由器、小米路由器AX9000等偏高端型号方向正确的前提下固件需要升级到包含Docker服务的最新版本路由器上至少有一个可用的USB接口建议USB 3.0接口方便挂载外置存储一块外置存储设备可以是USB闪存盘、移动硬盘或固态硬盘。我最推荐USB固态硬盘、其次是有独立供电的移动硬盘盒直接插机械硬盘裸盘容易被供电不足坑到后面细说准备一台电脑或手机用于访问路由器后台和网盘页面系统不限如果这些条件都满足就可以开始下面的步骤了。规划好存储位置是整件事能否长期稳定运行的关键这一步千万别跳过。2. 打开Docker开关把“存储根据地”挪到USB硬盘2.1 路由器后台里的Docker入口藏得有点深小米路由器默认管理地址是192.168.31.1进入后台后Docker入口不是摆在首页的。以小米万兆路由器当前固件为例通常路径是进入“高级设置”或“应用中心”页面找到一个叫Docker的图标。如果找不到先检查固件版本进入系统升级页面看是否有新固件可更新很多型号的Docker功能是后来通过固件下放的出厂初始版本不一定带。部分早期固件打开Docker入口后还需要手动点击“开启Docker服务”按钮等待系统完成初始化。这个过程会生成Docker所需的基础目录和运行时需要一点耐心等它转完。如果升级到最新固件后依然没有任何Docker入口那可能是你这台型号本身没有开放这个功能这种硬件层面的限制没法绕过只能换设备或者考虑其他方案。2.2 外置盘选型和文件系统格式尽量一次到位这是整篇文章里我最想让大家重视的一步。Docker容器本身和镜像都要占用路由器内置存储而内置存储不但容量小还承担着系统日志和其他固件数据的写入。如果直接把可道云的数据放在内置分区用不了多久就会遇到磁盘写满、容器崩溃的问题。因此外置USB盘不仅是网盘的数据仓库也应该作为Docker的“数据盘”来使用。具体来说打开路由器后台的“存储管理”页面查看插入的USB设备是否被正确识别。如果没有识别先重新插拔或格式化调整分区表格式后再试。文件系统格式方面推荐exFAT或ext4。exFAT的兼容性更好Windows和路由器都能正常读写ext4是Linux原生的文件系统权限支持最完整如果有Linux使用经验就用它。不太建议用NTFS虽然路由器能识别但NTFS在Linux环境下没有完整的权限模型支持后面可道云写文件时会出现各种诡异的权限拒绝问题排查起来很费劲。如果你已经在用NTFS且数据不多我建议直接备份后重新格式化成exFAT省得后面踩坑。2.3 修改Docker根目录别让内置存储一天爆满在Docker功能页面里通常会有“存储设置”或“根目录设置”选项默认值是指向路由器的内置分区。我们需要把这个根目录迁移到USB外置盘上一般路径类似/mnt/xxx/usb不同固件版本显示不完全一样你只要在设置界面的下拉列表里找到容量最大、指向USB设备的那一项即可。这一步的本质是把所有Docker镜像、容器元数据都放到大容量外置盘上内置闪存只跑系统和路由功能压力瞬间小很多。操作完成后可以再回到存储管理页面看一眼已用空间确认镜像存储位置确实变了。我见过不少人忽略这一步结果拉了两个镜像就把路由器内置空间占满然后后台页面各种报错。所以记住在拉取可道云镜像之前先改Docker根目录这个顺序不能反。3. 创建可道云容器镜像选择与参数逐项拆解3.1 拉取镜像前做一件小事配置镜像加速Docker Hub在国内网络环境下访问速度经常不理想拉取大镜像时那种“转圈半小时”的体验极其磨人。解决方法是给Docker配置镜像加速。在Docker设置页面里通常有“镜像加速”或“Registry镜像”配置项填入一个可用的加速器地址保存即可。常见的公共加速地址可以在网上搜到一批如果某个地址失效了就换一个前提是填入的地址需要满足可访问性。配置完成后到镜像管理界面搜索kodexplorer找到官方镜像kodcloud/kodexplorer点击下载。镜像不大正常网络下一两分钟就能拉完如果迟迟没有进度检查一下加速地址是否配置正确或者把路由器暂时断电重启后再试。3.2 容器参数这样填每个字段都有讲究镜像下载完成后点击“创建容器”部分版本的入口叫“运行”或“部署”关键参数我拆开讲这样你可以理解每一步为什么要这么填而不是机械照抄。容器名称填写“kodexplorer”或任意你记得住的名称这个只影响管理界面的显示不涉及功能。端口映射宿主机端口填8080容器端口填80。为什么不用80直接映射因为路由器管理界面本身占用了80端口再用80起容器会直接冲突容器会一直起不来。8080只是示例如果这个端口也被占用换成18080、18081都行只要记住你填的数字后面访问地址要用它。容器内端口80不要改动那是可道云PHP服务监听的固定端口。目录映射把宿主机的一个目录挂载到容器的 /var/www/html。这里需要先在外置盘上建一个目录比如 /mnt/xxx/usb/kodexplorer然后在创建容器时把“存储”或“卷”设置里的容器路径填成 /var/www/html。这个目录将来既是可道云的程序目录也是所有网盘文件的存放目录一举两得。之所以把整个程序目录都挂出来背后的逻辑很实在以后想备份直接把外置盘上这个目录拷贝一份就行不用进容器折腾即使容器挂了重建一个数据也毫发无损。重启策略容器创建页面一般有“总是重启”“容器退出时重启”等选项务必选择“总是重启”(Always)。设置后路由器断电重启或Docker服务重启时容器会自动拉起来否则就得手动点启动体验大打折扣。网络模式保持默认的bridge网桥模式即可不需要host模式端口映射已经满足访问需求。有部分固件的Docker管理界面会提供“高级设置”里的终端功能如果你熟悉命令行也可以在终端里用docker run命令创建效果一样。但绝大多数人用后台表单就够了重点是把上面四个参数填对。3.3 首次访问与初始化设置密码别跳过容器启动后浏览器输入 http://192.168.31.1:8080看到可道云的安装欢迎页面就说明容器跑起来了。首次进入会要求你设置管理员账号和密码这一步千万别跳过、更别用弱密码——私有网盘里放的往往是全家人的照片和工作文档密码管理意识从第一天就要到位。初始化过程中还可能让你选择数据存储目录直接保持默认的 /var/www/html 即可因为这个路径已经映射到外置盘了。初始化完成后登录进去会看到一个浏览器端的文件管理器界面可以新建文件夹、上传文件界面风格和传统网盘很像学习成本几乎为零。3.4 验证部署是否成功上传下载一轮实测初始化完成后不要急着投入使用先在网页里做一些基本操作验证系统健康度。创建几个测试文件夹分别上传一个几MB的小文件、一个几百MB的大文件再下载下来对比文件大小和MD5是否一致。同时在路由器的容器列表页面观察一下容器的CPU和内存占用如果可道云页面响应流畅、CPU占用不高说明部署基本没问题。如果上传下载出现异常卡顿甚至中断先别急着怪路由器性能优先检查USB外置盘的读写速度和供电稳定性因为大部分文件传输问题反而出在存储这一环。4. 跑通之后上传限制、目录规划与多设备使用4.1 上传大小限制不止一层要拆开看可道云刚部署完时如果直接用网页上传超过几十MB的文件多半会失败这不是网盘软件坏了而是PHP上传限制没有放开。常见的限制有两层PHP的 upload_max_filesize 和 post_max_size 参数以及可道云自身的上传配置。登录可道云后台进入“系统设置”或“应用设置”里找到文件上传相关的配置项把单文件大小限制调到你需要的数值比如2048MB。但很多时候只改这里还不够因为PHP默认配置的上传上限可能只有2MB或8MB。这时需要进入容器的终端找到PHP配置文件 php.ini把 upload_max_filesize 和 post_max_size 都改成适当大小比如1024M然后重启容器使配置生效。不同镜像版本php.ini的路径可能不同一般是 /usr/local/etc/php/php.ini 或 /etc/php/ 目录下在终端里用 find / -name php.ini 找一下即可。这两层配置都改完后大文件上传就不会再报错了。这里提醒一句大文件上传非常考验USB外置盘的写入速度和稳定性如果是机械硬盘且USB口供电不足传大文件时盘可能直接掉线后面会专门讲这个问题。4.2 数据目录规划别把容器数据和生活数据混在一起运行一段时间后外置盘上会出现两类数据一类是Docker镜像和容器相关的系统数据在Docker根目录下另一类是可道云里存放的实际文件在你自己指定的kodexplorer数据目录下。这两类数据的备份策略和关注度完全不同所以从一开始就要把它们在逻辑上分开。我的建议是在外置盘根目录建两个目录比如 /mnt/xxx/usb/docker 作为Docker根目录/mnt/xxx/usb/kodexplorer 作为可道云数据目录。这样做的最大好处是日常备份只需要关心kodexplorer这个目录就行Docker容器随时可以重建不心疼如果整个盘要换也只要把这两个目录整体拷贝到新盘再在Docker设置里指过去即可。这种“数据与运行环境分离”的思路玩Docker时间久了你会发现走到哪儿都适用。4.3 局域网多设备访问手机、电脑、电视盒子都能用可道云部署好之后同一局域网内的任何设备都可以通过浏览器访问。手机和平板上直接输入 http://192.168.31.1:8080 登录即可电脑上同样如此。不需要装任何客户端这一点比很多商业网盘还要省事。实际体验下来最常用的场景有三个把手机里的照片通过网页上传到网盘备份把电脑上的工作文档拖到网盘里统一管理换电脑时直接下载在电视盒子上装个浏览器或通过文件管理器访问网盘放视频和音频文件。注意可道云对视频格式的支持取决于浏览器或播放器的解码能力常见的MP4格式在大部分设备上都能在线播放MKV等格式可能需要下载后播放。这里有个小技巧如果家里的路由器开了访客网络或AP隔离访客设备是访问不了网盘的这是正常现象不要以为是网盘出了问题。在同网段内的主力设备访问即可。5. 一个月实测性能表现、稳定性问题与排查全过程5.1 读写速度和实际体感先说大家最关心的速度。我的外置盘是一块USB 3.0接口的SSD在局域网内通过可道云上传下载文件实际速度大约在30-60MB/s之间瓶颈主要在路由器的USB控制器和Wi-Fi无线链路。有线连接的电脑能跑得更稳定Wi-Fi 6手机在近距离下速度也很可观。几十MB的文档和照片几乎秒开单个1GB左右的大文件传输需要一点时间但整体体验在“轻量私有网盘”这个定位上完全合格。如果你是机械硬盘速度会明显下降日常小文件使用没问题但传大量小文件或超大文件时会比较吃力。CPU占用方面我观察过文件传输时路由器CPU的负载偶发能到50%-80%日常待机时容器几乎不吃CPU内存占用则稳定在两三百MB左右。所以只要不是同时在路由器上跑一堆其他容器这个方案相当稳妥。5.2 踩坑记录三个问题把我折腾到半夜第一个坑是供电不足导致的USB设备掉盘。起初我用的是2.5英寸机械硬盘直接插路由器USB口开始两天一切正常第三天开始出现可道云页面打不开、提示文件操作失败的情况。进路由器存储管理页面一看USB盘直接不显示了。反复插拔后恢复一会儿又掉典型的供电不足症状。机械硬盘启动瞬间需要较大电流路由器的USB口供电能力有限扛不住这种冲击。解决办法是不要直插机械硬盘改用带独立供电的硬盘盒或者直接换USB闪存盘/USB固态硬盘。我后来换成了SSD再没出现掉盘问题。如果你实在想用机械硬盘至少确保你的硬盘盒有外接电源口这是绕不过去的硬件限制。第二个坑是NTFS文件系统的权限问题。刚开始因为旧硬盘本来就是NTFS格式图省事没格式化就直接挂载了。结果可道云安装后能浏览目录但创建文件夹时反复提示“目录不可写”或“权限不足”。查了一圈发现是NTFS挂载后Linux权限模型支持不完整Docker容器内以www-data用户写入时没权限。最后把数据备份出来将硬盘格式化成exFAT重新挂载问题才彻底消失。第三个坑是在Docker根目录没有迁移到外置盘之前我拉了一个镜像后路由器内置存储空间告急页面提示“no space left on device”那时候容器根本启动不了。这个坑前面已经提前预警了这里再强调一遍迁移Docker根目录的操作一定要在拉镜像之前完成不然轻则镜像拉不下来重则路由器系统分区写满后各种异常。5.3 容器备份与恢复数据比容器珍贵得多运行一个多月里我养成了一个习惯每隔一两周把外置盘上的kodexplorer数据目录用移动硬盘或电脑拷贝一份作为冷备份。可道云容器本身随时可以删除重建重建过程十分钟都用不了但里面的文件如果丢了就真的没了。所以容器的备份不是重点数据的备份才是核心。如果哪天容器状态异常处理思路也很简单在Docker管理界面把kodexplorer容器停止并删除然后用同样的参数重新创建一个新容器挂载同一个数据目录启动后你的文件会原封不动地出现在可道云里。这个“容器可重构、数据不落地”的设计思路就是当初为什么坚持把整个 /var/www/html 目录挂出来的原因。6. 安全加固私有网盘别裸奔在局域网上6.1 改掉默认端口加一层登录保护可道云默认的管理员账号密码如果保持简单口令内网里任何设备都能轻易登录。这还不算最危险的——如果你的路由器误开了UPnP或者曾被配置过端口转发网盘服务暴露到公网后分分钟就会被全网扫描器盯上暴力破解只是一个晚上之间的事。所以三个最基本的动作必须做一是可道云后台把管理员密码改成高强度密码大小写字母数字符号至少12位二是把访问端口从常见的8080改成不常被扫描的端口比如18080、28456之类三是如果路由器支持开启可道云的登录验证码功能。改完端口后下次访问要用新端口。6.2 关于外网访问我的态度是“默认关闭”很多人部署完网盘之后的第一反应是想在外面也能访问家里的文件这种需求我太理解了但实际上非常不建议把可道云直接通过端口转发暴露到公网。家用宽带的公网IP不是固定不变的做端口转发相当于把网盘的登录页面直接放在公网上哪怕密码再强面对自动化攻击工具的持续尝试心理压力也不小。更稳妥的做法是网盘服务保持只在内网可用外网访问需求不强烈就先放弃如果实在有需求建议通过路由器或独立设备上配置成熟的安全远程访问机制比如加密隧道等方式实现不要直接裸奔。安全访问的方式有很多但前提是你要清楚自己在做什么对默认开放端口这件事保持足够的警惕。6.3 固件、镜像和数据的定期维护最后聊聊长期维护。我的习惯是每隔一段时间去看看路由器固件有没有更新Docker镜像有没有新版本。可道云的更新比较简单先停止容器备份数据目录给容器换上新版本的镜像标签重新创建容器再启动即可。需要注意重新创建容器时所有参数要原样填写尤其是目录映射必须指向原数据目录千万不能搞混。另外如果路由器本身需要重启不用担心容器不会自动恢复因为前面设置了“总是重启”策略路由器和Docker服务起来后容器会自动拉起来。几个月的实测中这套组合的稳定程度是让人放心的部署完成后基本处于“忘记它存在”的状态。我自己实际用下来的最大感受是小米万兆路由器跑可道云的组合最适合的场景就是家庭内部的重要文件共享和集中备份它不像商业网盘那样有免费空间限制也不像全功能NAS那样需要精力和预算去维护。一块闲置的SSD加一个免费的开源镜像就能把全家电子资料统一收口这种“手边刚好的设备”恰好被派上用场的成就感比单纯买一台新NAS要强得多。如果你也正好有这台路由器和一块闲置硬盘大胆照着上面的步骤去试遇到问题回头再看一遍踩坑部分的排查思路大概率就能自己解决了。