当 Ollama 的模型列表接口返回 HTTP 404 时,先不要急着重装。404 这个状态码在 Ollama 服务中意味着请求到达了某个能返回 HTTP 的进程,但该进程没有注册对应的路由,或者请求落到了错误的端口/服务上。常见的 fault domain 有三个:客户端请求构造、Ollama 服务本身、以及模型存储目录状态。
Ollama 模型列表返回 404,通常不是“没有模型”,而是请求路径与服务版本不匹配、服务未就绪或端口被占用。应先检查curl http://localhost:11434/api/tags的完整返回,再结合ollama list判断是路由问题还是存储问题。重装前备份~/.ollama,并且只在服务状态无法恢复时使用。
先定位 404 发生在哪一层
打开终端,分别执行 ollama list 与 curl -i http://localhost:11434/api/tags。如果 ollama list 正常返回而 curl 返回 404,说明客户端请求的地址不是 Ollama 当前监听地址,或者路径写错。如果两者都失败,问题更可能出在服务进程本身。
curl -i http://localhost:11434/api/tags
观察返回头中的 Server 字段,确认响应来自 Ollama。如果 404 响应带有 HTML 页面,说明请求被反向代理或其他 Web 服务拦截。如果连接被拒绝,则服务未启动。
常见 fault domain 分析
1. 请求路径不对
Ollama 原生 API 的模型列表端点是 /api/tags。有些客户端基于 OpenAI 兼容规范,会请求 /v1/models,该路径在 Ollama 上是另一套路由,而且可能受版本和环境变量影响。你需要确认自己调用的是哪套接口,而不是假设所有路径都指向同一个列表。
2. 服务启动时的环境变量
如果设置了 OLLAMA_HOST 或 OLLAMA_MODELS,服务可能监听在非默认端口,或模型目录被指向不存在的位置。此时用默认地址访问会得到 404,但实际服务在其他地址,运行 ollama list 也会反映实际模型目录。检查这些变量的方式是:
echo $OLLAMA_HOST $OLLAMA_MODELS
3. 模型目录权限或损坏
模型目录不可读时,Ollama 可能启动成功,但列表接口返回 500 而不是 404。所以 404 一般不直接指向文件系统故障,但有一种情况除外:你在容器中挂载了新的模型目录,但服务没有重新初始化该目录,导致 API 路由未挂载。这种场景需要结合启动日志判断。
重装前的备份与信息收集
在重装前,先保留现场状态。记录当前 Ollama 版本:ollama `--version`。备份模型目录和数据文件:
systemctl stop ollama
cp -r ~/.ollama /tmp/ollama_backup
注意,备份目录可能很大,先确认磁盘空间。备份不要求包含模型文件,但至少保留 ~/.ollama/llm 或 ~/.ollama/models 下的 blobs 目录,避免重复下载。
重装方案与验证
只有在确认服务二进制损坏、升级导致破坏、或完全无法定位原因时才考虑重装。重装不会删除模型,但为了安全,备份上述目录。以 Linux 为例,停止服务后重新运行官方安装脚本:
systemctl stop ollama
curl -fsSL https://ollama.com/install.sh | sh
systemctl start ollama
重启后立即执行 ollama list,再请求 /api/tags。如果依然 404,就要检查是否有防火墙或代理拦截了 11434 端口。重装不是万能的,如果问题源于模型存储权限或服务配置,重装不会自动修正。
验证完成后,如果一切正常,可以把备份的模型目录恢复回去,或者直接用原有 ~/.ollama 目录启动服务。若使用容器部署,重装应重新创建容器并挂载旧的数据卷,而不是删除数据卷。