小米路由器 Docker-compose 部署 Ollama 大模型:常见报错与排查

先说结论:在小米消费级路由器上用 Docker Compose 跑 Ollama,属于社区/自制固件边缘部署,不是小米官方在路由器商品页承诺的「一键大模型」。宿主是路由器(或你另接的 NAS/PC),不要和手机 HyperOS / 手机本地大模型混为一谈。报错通常落在三类:Compose 网络与宿主网桥/子网冲突、卷挂载权限、内存不足被 OOM。下文只给可核对的官方文档路径与通用排查命令;不编造无出处的部署效果口号、伪功耗表或无方法学的模型打分表。

先分清宿主:路由器 ≠ 手机 ≠ PC/NAS

宿主类型 典型产品锚 和本篇关系
消费级路由器 Xiaomi 路由器 BE6500 / BE6500 Pro 等 本篇默认讨论对象;官方卖的是 Wi-Fi 路由能力,不是 Ollama 套件
PC / NAS / 自建 Linux 桌面或服务器发行版 + Docker Engine Compose/Ollama 官方文档的主战场;资源远大于路由 SoC
手机 小米/红米手机 HyperOS 不是本篇 Docker 宿主;勿把手机型号表套进路由器排查

出处:小米商城产品页 Xiaomi 路由器 BE6500、BE6500 Pro;Ollama 项目 GitHub ollama/ollama、Ollama FAQ。MobileModels 仅在文中实际点名手机时使用——本篇不点名手机 SKU。

报错一:网络 / bridge / 子网重叠

Compose 默认为项目建 bridge 网络,服务可用服务名互访;自定义 networks + ipam.subnet 时,子网不得与宿主已有网桥/地址池重叠,否则会出现 Pool overlaps with other one 一类失败。路由固件上往往已有 br-lan / docker0,再手写冲突网段更容易踩坑。

建议顺序:

  1. docker network ls 与 ip link / 路由管理页确认现有网桥与 LAN 段。
  2. 单容器场景优先不写自定义 networks,用 Compose 默认网络(官方说明:默认即 bridge,服务名可 DNS 发现)。
  3. 必须自定义时,选与 LAN/docker0 不重叠的子网,并按 Docker 文档配置 ipam;创建失败时以守护进程报错原文为准,勿背「神秘错误码表」。
  4. 端口占用(如 11434)改映射或停掉占用进程后再 docker compose up。
services:
  ollama:
    image: ollama/ollama:latest
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    environment:
      - OLLAMA_HOST=0.0.0.0:11434
volumes:
  ollama_data:

出处:Docker Docs Networking in Compose;Compose file · networks / ipam;Bridge network driver;docker network create(子网重叠会失败)。

报错二:卷路径 / 权限拒绝

permission denied、Access denied on path 多半是宿主目录属主/权限与容器内进程 UID 不一致(共享盘 nobody、外置 USB 挂载选项等)。这是 Linux 权限模型问题,不是「Ollama 镜像坏了」。

  • 先 ls -la 看宿主目录;用 docker logs / docker exec … id 对照容器用户。
  • 优先:目录属主与挂载方式对齐;或改用 Compose named volume(由 Docker 管理数据目录)。
  • chmod 777 / user: "0:0" 仅作短时对照,长期 root 跑推理会放大安全面——路由还承担全家上网,更应谨慎。
  • 外置盘注意文件系统类型与挂载选项(只读、同步策略),换盘对照再下结论。

出处:Docker Docs Compose services(volumes / user 等字段语义以官方为准);Ollama 镜像与数据目录约定见 ollama/ollama。

报错三:内存吃紧与 OOM

路由 SoC 内存通常远小于 PC/NAS。进程退出码 137、dmesg 出现 oom-kill,或 docker inspect 里 OOMKilled 为 true,应先看整机 free/swap与模型体积,而不是改无依据的「成功率参数」。

  1. free -m、swapon -s、dmesg | grep -i oom、docker stats。
  2. 优先拉更小的公开模型标签;并发与常驻模型数宁可偏保守。
  3. 官方可核对的环境变量(非路由专用「魔法值」):OLLAMA_HOST(默认回环,局域网访问需显式绑定)、OLLAMA_KEEP_ALIVE、OLLAMA_MAX_LOADED_MODELS 等,以 Ollama FAQ / 源码 envconfig 为准。
  4. swap 可缓解尖峰,但会磨损闪存/外置盘,并拖慢推理;是否启用由你权衡,本文不给伪「最优 GB 数」。

出处:Ollama FAQ · configure server / expose on network;环境变量实现 envconfig/config.go;FAQ 源稿 docs/faq.mdx。

数据边界:已删除原稿无方法学的机型实测峰值/延迟数字、伪功耗瓦数、星级能力打分表、按机型编造的并发上限矩阵,以及把社区 OpenWrt/Docker 实践写成厂商商品页标配能力的表述。Compose 报错以守护进程原文为准,不维护发明错误码与「一招必好」对照表。模型体积与内存占用随量化、上下文、并发变化,请以 ollama list / docker stats 现场为准。文首已声明不编造无出处的部署效果口号。

可选:Ollama + Web UI 同网

若再跑 Open WebUI,让两服务加入同一 Compose 网络,用服务名访问(例如 http://ollama:11434),并按 Ollama FAQ 配置 OLLAMA_HOST / 允许的 Origins。前端镜像与变量以 Open WebUI 仓库说明为准;本站不担保第三方 UI 版本组合。

出处:GitHub open-webui/open-webui;Compose 服务发现见上文 Docker Networking 文档。

验收清单

  • docker compose ps 中 ollama 为 running;curl 本机或局域网 :11434 有 API 响应。
  • docker logs ollama 无持续 permission / network 报错;OOMKilled 为 false。
  • 路由管理页确认 LAN/Wi-Fi 正常——推理容器不应拖垮全家上网;异常时先停容器再对照。
  • 行情/配件可对照站内 /price;手机本地模型题与本篇路由 Docker 分轨。

FAQ

Q:小米官方会在路由器里预装 Ollama 吗?
A:公开商品页描述的是路由/Wi-Fi 能力。Docker + Ollama 是你在自有固件或兼容环境下的自建,请勿写成官方标配。
Q:一定要写自定义 bridge 子网吗?
A:多数单机 Compose 用默认网络即可;只有多栈隔离或与现网冲突时才需要自定义,且子网不能重叠。
Q:权限问题长期用 root 容器可以吗?
A:短时对照可以,长期不推荐——路由是网络边界设备,扩大容器权限等于扩大攻击面。
Q:手机能不能直接套这篇 compose?
A:不能。手机不是这篇的 Docker 宿主;手机侧请走各厂商公开发布的端侧能力说明。