pull model manifest: file does not exist不是网络错也不是磁盘错,是 Ollama 拿到了 registry 的“没这个 tag”应答。最常见三种原因:tag 大小写错了、tag 是某个不存在的量化档、OLLAMA_HOST指向了另一台机器。
Issue & Env(案发现场与环境)
- 业务场景:第一次跑 DeepSeek-R1,按博客/视频里看到的命令照搬,Ollama 直接回 file does not exist,没下任何东西。
- 环境:Ollama v0.34.x,
ollama pull <name>:<tag>是拉模型的官方入口;tag 是命名空间model:tag里冒号右边的部分,区分大小写且必须与模型页一字不差。
StackTrace(堆栈日志)
pulling manifest
Error: pull model manifest: file does not exist
如果请求里带了不存在的模型名或错位的字符,Ollama 在解析 manifest 阶段就失败,连「开始下载」的进度条都不会出现。如果进度条走了一会再挂,多半是磁盘满或网络超时,不是这个错。
Reproduce(复现代码)
# 1) 大写 B:常见误写
ollama pull deepseek-r1:8B
# Error: pull model manifest: file does not exist
# 2) 自创的量化档:模型页根本没这个 tag
ollama pull deepseek-r1:8b-q8_0
# Error: pull model manifest: file does not exist
# 3) 跑/拉都报同一个错(首次拉模型也会触发)
ollama run deepseek-r1:32b-instruct-q5_K_M
# Error: pull model manifest: file does not exist
对照可用的命令:
ollama pull deepseek-r1:8b # OK
ollama pull deepseek-r1:latest # OK,与 8b 同源
Root Cause(根因分析)
Ollama 拉模型的流程是:先解析 model:tag → 向 registry 要 manifest → 按 manifest 列表拉 layer。Manifest 是「这个 tag 由哪几个权重/模板文件组成」的小型描述文件。file does not exist 出现在第一步,也就是 registry 端返回 404 后客户端把错误翻译成人话。
按踩坑频率排序,根因就三种。
一、tag 大小写或下划线写错
这是最高频的。社区案例里 ollama pull llama3.2:3B 失败而 llama3.2:3b 通过是同一种问题。Ollama 的 tag 解析是 exact string,没有“自动归一化大小写”这一步。同样的坑在量化档上更明显:Q4_K_M 与 q4_K_M、q4_k_m 在某些镜像源里会被当成不同 tag 处理。
deepseek-r1 系列 tag 全部小写:1.5b/7b/8b/14b/32b/70b/671b。8B、8b-instruct 都不存在。
二、tag 在 registry 里压根没发布
模型不一定发布了你期望的那个 tag。deepseek-r1 在 Ollama 库页只发了这 7 个数字 tag,没有 -q4_K_M 后缀、没有 -chat 后缀、没有 -instruct 后缀。llama3.1:8b-instruct-q4_K_M 这种带详细后缀的写法是 llama.cpp / Hugging Face 那一套习惯,照搬到 Ollama 必然 manifest 缺失。
三、客户端打到了另一台机器
OLLAMA_HOST 一旦被改成另一台机器的 IP,本机 ollama pull 实际访问的是远端的 registry 视图。模型在远端没拉过、或者远端 registry 不可达,表现出来的都是 file does not exist。这种情况下 ollama list 在本机可能是空的,但其它机器上有。直接 ollama list 比对一下就能定位。
ollama create 出来的本地模型走另一条路,但同样会因为 FROM ./some-model.gguf 找不到本地文件而报同名错。
The Fix(解决方案)
第一步:复制模型页的精确 tag
打开 https://ollama.com/library/deepseek-r1 页面的 tags 列表,逐字复制。8b、14b、32b、70b、671b 这些数字 + b 的写法才对。
ollama pull deepseek-r1:8b
第二步:怀疑大小写就先试 latest
deepseek-r1:latest 是个稳定的别名,与 deepseek-r1:8b 同源(都是 DeepSeek-R1-0528-Qwen3-8B 的 Q4_K_M)。先跑 latest 验证服务可用,再去敲具体 tag:
ollama pull deepseek-r1:latest # 验证用
ollama pull deepseek-r1:8b # 精确 tag
第三步:拉之前查本地和远端
ollama list # 本地已有什么
curl http://localhost:11434/api/tags # 服务端视角
如果 OLLAMA_HOST 被改了,ollama list 只会列你配置的远端那台机器上的模型。本机命令行用默认 http://127.0.0.1:11434,远端的 OLLAMA_HOST 设置在另一个 shell 里跑着,两边各看各的。排查时把当前 shell 的环境也看一眼:env | grep OLLAMA。
第四步:模型确实要某个 tag 才存在时怎么办
Ollama 库里没有 deepseek-r1:14b-q5_K_M,但你就要 Q5_K_M。两个选项:
- 直接拉 Hugging Face 上的
DeepSeek-R1-Distill-Qwen-14B-Q5_K_M.gguf,再用 ModelfileFROM ./xxx.gguf创建本地 tag:
curl -L -o deepseek-r1-distill-qwen-14b-q5_k_m.gguf \
https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-14B-GGUF/resolve/main/deepseek-r1-distill-qwen-14b-q5_k_m.gguf
cat > Modelfile <<'EOF'
FROM ./deepseek-r1-distill-qwen-14b-q5_k_m.gguf
PARAMETER num_ctx 4096
EOF
ollama create deepseek-r1:14b-q5_K_M -f Modelfile
ollama run deepseek-r1:14b-q5_K_M
- 等 Ollama 官方加 tag(观察库页更新或 Ollama 官方博客的 release notes)。
ollama create 这条路在路径错(相对路径写错、./ 漏了)时也会触发同名错——Modelfile 的 FROM 必须能解析到具体文件,否则也会回退到 registry 查询。
References(参考来源)
- Fix common Ollama errors: 500, timeouts and stalled pullstroubleshooting-guide
- Ollama: pull model manifest: file does not existtroubleshooting-guide
- deepseek-r1 - Ollama Libraryollama-docs
