你打开某个客户端或脚本,想连本地模型,结果弹出一句「未检测到 ollama 服务 请检查是否正常启动」,模型列表空着,界面也不报具体原因。这篇不解释 ollama 是什么,只给一套从底层往外层的排查顺序:先确认进程活着没、再看端口有没有被占、然后看监听地址是不是只绑在本机、最后回头查客户端填的地址对不对。每一步都有能立刻敲的命令和判断依据,以及什么情况下这条路不适用。
你打开某个客户端或者自己写的脚本,想连本地模型跑点东西,结果界面直接弹出一句「未检测到 ollama 服务 请检查是否正常启动」,模型列表空着,也没告诉你具体哪儿不对。这种报错最烦的地方在于它把好几类问题压成了一句话,你得自己拆开找。
这篇不解释 ollama 是什么,只给一套从底层往外层的排查顺序:先确认进程活着没,再看端口有没有在监听、有没有被占,然后看监听地址是不是只绑在本机,最后回头查客户端填的地址对不对。每一步都有能立刻敲的命令和判断依据,也会写清楚什么情况下这条路不适用。
第一步:确认进程到底有没有跑起来
先分清两种启动方式:一种是在命令行前台跑服务命令,关掉终端就没了;另一种是后台常驻服务,比如系统服务或者桌面端托盘。两者的查看方式完全不同,用错方法会让你误判。桌面端软件装上,不等于后端服务在跑——很多人只装了界面没启动进程,这是这类报错里最常见的一种情况。
- 看有没有进程用系统自带的进程查看工具搜一下服务名。有输出说明进程活着,没输出说明根本没起,直接去启动它,别急着查端口。
- 看托盘或服务列表桌面端看菜单栏或托盘图标亮不亮,系统服务方式看服务状态是运行还是停止。图标灰的、状态是停止的,就是没起。
- 看启动日志手动前台跑一次,重点找启动后有没有正常打印监听地址那一行。如果进程起来又立刻退出,问题在后面几步,不在这一步。
- 前台启动
- 在终端里直接跑,窗口关掉进程就结束,适合临时调试
- 后台常驻
- 由系统服务或桌面端托管,开机自启,适合长期使用
- 拉起即退出
- 进程一闪而过,通常是端口被占或配置有误,看下一节
第二步:端口被占或没在监听
默认端口只有一份。如果你之前手动起过一个进程又没关干净,再启动时就会因为端口被占而起不来,表现往往就是连不上,而不是给一句明确的报错。所以这一步的顺序是:先看端口有没有在监听,再看是谁占的,最后判断是不是另一个同名进程在跑。
Windows、macOS、Linux 查端口的命令不一样,但思路一致:查占用、看进程号、追到具体程序。别一上来就改端口,改端口是下策——改完必须同步改客户端地址,否则问题会从端口占用变成地址不匹配,更难查。
| 现象 | 可能原因 | 下一步 |
|---|---|---|
| 端口无监听 | 服务没起或起完就退 | 回第一步看日志 |
| 端口被别的进程占 | 残留进程没关干净 | 先结束旧进程再启动 |
| 端口通但客户端连不上 | 地址或协议填错 | 跳到第四节查客户端 |
| 改过端口后全都不通 | 客户端没同步改 | 把两端地址对齐 |
第三步:服务只绑在 127.0.0.1,外部当然看不到
默认绑定地址只对本机生效。这解释了一种很典型的现象:本机的客户端能连,但局域网上另一台机器、或者容器里的应用怎么都连不上,报的还是「未检测到服务」。不是服务坏了,是它压根没在那张网卡上监听。
要放开监听就得改绑定地址的环境变量,改完重启服务再验一次。具体变量名和取值到站内术语词典与部署测算页核对,别照抄来路不明的配置,不同安装方式的变量生效位置也不一样。
- 改之前先问自己:这台机器有几张网卡,服务该出现在哪一张上
- 只在本机自用的场景不要开这个口子,本机连不上就该回前两步查
- 放开绑定是安全动作不是纯技术动作:一旦监听全部网卡,同网段任何人都能调你的模型,公网暴露风险更大
- 改完必须重启服务,光改文件不重启等于没改
- 重启后用另一台机器实测一次,别只看本机结果
本机能连、别的机器连不上,先怀疑绑定地址,而不是怀疑模型。
第四步:客户端地址、协议和代理三项对齐
客户端报「未检测到服务」时,服务端可能一切正常,只是客户端填的东西不对。常见三类:地址漏了端口、协议写法和服务端对不上、或者写了容器内网地址而服务其实跑在宿主机上。逐项对照服务端实际监听的地址,改完一项测一次。
容器类应用(知识库、工作台、编排平台)连不上,八成是网络命名空间问题:容器里的本机地址指的是容器自己,不是宿主机。这种情况下要把地址换成宿主机可被容器访问到的那个地址,或者让两个容器进同一个网络。系统代理和抓包工具也会劫持本地回环请求,导致明明服务在跑还是连不通,临时关掉代理再试一次就能分辨。
| 客户端填的 | 实际情况 | 结论 |
|---|---|---|
| 本机地址 | 服务也在本机 | 应能连通,不通查代理 |
| 本机地址 | 服务在容器里 | 填错了,换成可访问地址 |
| 容器内地址 | 服务在宿主机 | 填错了,换成宿主机地址 |
| 缺端口 | 服务在默认端口 | 补上端口再试 |
| 报模型不存在 | 服务本身正常 | 问题在模型侧,别在端口上耗时间 |
收尾:一套五分钟自检回路
把前面四步固定成一个顺序:进程在不在 → 端口通不通 → 本机能连不能连 → 换一台机器能不能连 → 客户端里填的地址对不对。每次只改一个变量再测,否则你永远不知道是哪一步起的作用。给自己留个基线:正常的时候把监听地址、端口和能连通的调用方式记一笔,下次报错直接对比差异,比从头查快得多。
- 记基线正常状态下把监听地址、端口、能连通的客户端配置抄一份存着,这是后面所有对比的参照。
- 单变量改动每次只改一个设置,改完立刻测一次,确认是这一改动起作用或不起作用。
- 确认配置被读到重启服务后如果还是原样,先确认环境变量真的被这个进程读到了,配置放错文件或没重载是高频坑。
长期稳定的话,建议把服务设成开机自启,能减少「忘了启动」这类纯人为原因。具体做法按你的系统类型去站内教程页核对,不同发行版和桌面环境的设置路径差别不小。
下一步如果你在几个本地模型服务之间犹豫用哪个,或者想确认自己这套配置有没有踩到常见的坑,可以去站内工具目录和部署测算页对照当时的资料,把服务端和客户端两边配置对齐再动手。→常见问题
本机上明明能连,为什么另一个应用说未检测到服务?
大概率是绑定地址只对本机生效,或者那个应用跑在容器里、把回环地址当成了宿主机地址。先在服务所在机器上确认能连,再从远程那台机器测一次端口通不通,两边结果一对比就能定位是网络层还是客户端填错。
端口占用一定要换端口吗?
不一定。先看清占用端口的是不是另一个残留的 ollama 进程,如果是,关掉多余的进程比换端口干净得多。换端口会连带影响所有已配置的客户端,除非你确实需要两个实例并存,否则不建议用改端口当默认解法。
改完还是不行,最该先怀疑什么?
先怀疑配置没被真正读到。检查你改的环境变量写在了对当前启动方式生效的位置,改完有没有重启进程。第二步才是怀疑地址格式。多数「改完照旧」都是因为进程读的配置和改的不是同一份。