ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

ollama pull超时?DNS解析问题排查与离线导入全攻略

ollama pull超时?DNS解析问题排查与离线导入全攻略 如果你是在国内网络环境下跑ollama pull qwen大概率撞到过我截图里这句报错Error: pull model manifest: dial tcp: lookup registry.ollama.ai i/o timeout。别急着删软件重装这个报错和本地环境基本没关系问题出在拉模型那几步里的 DNS 解析环节。这篇文章会从报错本身拆起一层层带你定位再给出三条可落地的路改 DNS、换镜像站下载、离线导入。刚接触 ollama 的新手照着操作就能解决卡了半天没头绪的老手也能从中找到排查思路。1. 这行报错到底在说什么1.1 从 pull model manifest 开始解读先看几个关键串。ollama pull qwen是向本地 ollama 服务发送拉取 qwen 模型的命令真正干活的其实是本地后台服务它会去远端仓库 registry.ollama.ai 拉文件。pulling 流程分两步第一步拉 manifest也就是模型清单里面记录了模型分片、文件大小和 sha256 校验值第二步才是按清单逐个下载模型分片。报错发生在第一步的pull model manifest连清单都没拿到后面下载分片的事自然无从谈起。很多朋友误以为这是模型文件太大、下载不完实际上还没走到下载那一步只是获取仓库域名对应的 IP 地址时卡住了。我帮人排查过几十次类似问题绝大多数都是同一个原因——DNS 解析超时换句话说你的机器问了一圈registry.ollama.ai 在哪没人回答。dial tcp表示系统尝试建立 TCP 连接lookup registry.ollama.ai告诉我们查的是这个域名的地址i/o timeout则说明这个查询在超时时间内没有返回结果。把这三段拼起来报错的意思就是系统在解析 registry.ollama.ai 的 IP 时超时了于是整个连接失败。这和你本地磁盘、模型版本、ollama 服务本身都没关系。1.2 三类最常见触发场景我实际遇到的触发场景主要有三类。第一类是默认 DNS 服务器不可用或响应慢常见于公司内网、校园网以及部分宽带运营商 DNS 递归查询抽风的情况。第二类是 hosts 文件里被写过 registry.ollama.ai 的旧解析记录指向了一个早已失效的 IP域名解析虽然能成功返回但连到错误地址上一样会超时。第三类是在 Docker 容器里跑 ollama容器继承的 DNS 配置本身有问题或者容器的网络模式限制了对外请求。还有一个隐蔽原因系统启用了 IPv6 优先解析而当前网络环境下 IPv6 链路不通Windows 上偶尔会出现解析卡顿表现也是 i/o timeout。排查时报错字样都是同一句但背后的网络环节可能不同这也是为什么有人改 DNS 立刻就好了有人改完还是不行因为他的问题根本不在本机 DNS 上。2. 先把本机 DNS 修好5 分钟排查方案2.1 三条命令确认是不是 DNS 问题看到这个报错后不要直接反复重试同一个拉取命令先做三件小事。第一条命令是nslookup registry.ollama.ai观察返回结果。如果返回超时、或者提示找不到主机基本可以确认是 DNS 解析问题。第二条命令是ping registry.ollama.ai -c 4Windows 下把-c换成-n用于确认域名能不能被解析出 IP。如果 ping 显示 Ping request could not find host同样指向 DNS。第三条命令更直接测真实 HTTPS 连通性curl -v https://registry.ollama.ai/v2/ --connect-timeout 5。如果输出一直卡在 Trying ... 然后报 timeout而 nslookup 也异常那修复方向就非常明确了。顺手提一句别在这一步用浏览器去访问 registry.ollama.ai 验证浏览器有自己的 DNS 缓存和各类机制验证结果不一定可靠。2.2 Windows 下修改 DNS 与刷新缓存Windows 上最快的办法是走图形界面控制面板 → 网络和 Internet → 网络和共享中心 → 更改适配器设置右键当前网卡选择属性双击 Internet 协议版本 4 (TCP/IPv4)在 使用下面的 DNS 服务器地址 里填两个公共 DNS比如主 DNS 填 223.5.5.5备选填 119.29.29.29确定保存。不想点鼠标也可以用命令行管理员权限运行netsh interface ip set dns name以太网 static 223.5.5.5 primary netsh interface ip add dns name以太网 119.29.29.29 index2 ipconfig /flushdns注意网卡名称要换成你自己的实际名称可能是 WLAN 或 以太网。改完 DNS 后必须刷新一下本地缓存ipconfig /flushdns然后重新执行nslookup registry.ollama.ai验证能看到返回 IP 就说明解析恢复了这时候再ollama pull qwen。2.3 Linux 下修改 DNS 和 systemd-resolved 的坑Linux 下临时改 DNS 很简单编辑/etc/resolv.conf写入sudo tee /etc/resolv.conf EOF nameserver 223.5.5.5 nameserver 119.29.29.29 options timeout:2 attempts:3 EOF但这里有个常见的坑很多发行版用 systemd-resolved 接管了解析器直接改 resolv.conf 会在重启服务后覆盖掉。更稳妥的做法是用resolvectl改sudo resolvectl dns 全局 223.5.5.5 sudo resolvectl flush-caches如果用的是 NetworkManager 管理网络也可以用nmcli con mod修改连接的 DNS 配置再重新激活连接。改完同样要验证 nslookup 是否正常。另外Linux 下经常遇到的问题是容器和宿主机解析器不一致这个在第 4 章单独讲。2.4 macOS 下修改 DNSmacOS 用户打开系统设置 → 网络 → 当前连接 → 详细信息 → DNS在左侧 DNS 服务器列表里添加 223.5.5.5 和 119.29.29.29。命令行方式也有networksetup -setdnsservers Wi-Fi 223.5.5.5 119.29.29.29刷新缓存执行sudo dscacheutil -flushcache sudo killall -HUP mDNSRespondermacOS 新旧版本对 DNS 设置的生效速度不同有时候改完要等十几秒不要刚改完就急着测试。2.5 hosts 文件也要看一眼改完 DNS 还不行的话检查一下 hosts 文件。Windows 路径是C:\Windows\System32\drivers\etc\hostsLinux 和 macOS 都是/etc/hosts。重点看里面有没有和registry.ollama.ai相关的行。如果有用文本编辑器打开在该行前面加#注释掉或者直接删除。我遇到过一例某台机器之前装某些工具时往 hosts 里写了一条 registry.ollama.ai 的解析记录指向一个内网 IP后来内网服务下线了机器上 ollama 就一直报 dial tcp 超时。查 hosts 之前连续换了三轮 DNS 都没用问题根源完全不在 DNS 服务器上。所以这条排查建议别跳过。3. 还是拉不动换一条下载路线3.1 先试试小模型和多拉几次如果 DNS 修复后偶尔还是失败可以先做两个小验证。第一个是拉一个较小的模型比如ollama pull qwen2.5:0.5b如果小模型能正常拉下来说明 DNS 和网络链路已经恢复只是大模型体积大、连接不稳定重试几轮就好。第二个是直接再拉一次同一条命令因为 registry.ollama.ai 背后有多台服务器DNS 每次解析可能返回不同节点某一次碰到的节点刚好抽风重试就换到了可用节点。这里要提醒一下连续反复重试十几个来回不是好主意每次超时其实都在消耗时间。比较合理的节奏是连试两三次如果仍然不行就干脆换离线路线别在一条路上死磕。3.2 从 ModelScope 下载 GGUF 文件ollama 官方没有开放类似 docker 那种 registry mirror 的配置入口所以国内环境最可靠的路线是直接从模型站下载 GGUF 文件再本地导入。这里推荐 ModelScope 魔搭因为它是国内平台下载速度快而且 Qwen 官方在魔搭上有完整的 GGUF 文件。先用命令行工具下载。安装 modelscopepip install modelscope然后拉取 Qwen2.5-3B-Instruct 的 GGUF 版本modelscope download --model Qwen/Qwen2.5-3B-Instruct-GGUF --local_dir /data/models/qwen2.5-3b熟悉 git 的也可以用git lfs clone https://www.modelscope.cn/Qwen/Qwen2.5-3B-Instruct-GGUF.git下载完成后目录里通常有多个量化文件常见的是q2_k.gguf、q4_k_m.gguf、q8_0.gguf这类命名。q4_k_m 是通用推荐体积和效果比较平衡。不要选 q2_k虽然小但生成质量损失明显。3.3 用 Modelfile 离线导入到 ollama拿到 GGUF 文件后写一个 Modelfile。这是个纯文本文件告诉 ollama 怎么组装模型。先在下载目录下创建Modelfile内容如下FROM /data/models/qwen2.5-3b-instruct-q4_k_m.gguf TEMPLATE {{ if .System }}|im_start|system {{ .System }}|im_end| {{ end }}|im_start|user {{ .Prompt }}|im_end| |im_start|assistant PARAMETER temperature 0.7 PARAMETER top_p 0.8 PARAMETER repeat_penalty 1.1 PARAMETER num_ctx 8192注意几点FROM 后面最好写成绝对路径相对路径遇到奇怪的工作目录容易找不到文件。TEMPLATE 是 Qwen 的对话模板如果缺失导入后模型输出的格式会乱。然后执行ollama create qwen2.5:3b -f ./Modelfile看到 success 之后用ollama list确认模型已经出现再ollama run qwen2.5:3b就能正常对话了。这个方式完全绕开了 registry.ollama.ai只要能把 GGUF 文件弄到本地导入基本不会失败。3.4 qwen 系列怎么选才不卡离线导入之后还面临一个实际问题本地机器跑得动多大的模型。我把 qwen2.5 系列常见的 Q4_K_M 量化文件做了个对照表按照实际部署经验标注了最低可用配置。模型GGUF 文件大小约最低内存/显存建议适合场景qwen2.5:0.5b0.4 GB2 GB 内存纯 CPU 跑、嵌入式设备qwen2.5:1.5b1.0 GB4 GB 内存日常问答测试qwen2.5:3b2.0 GB8 GB 内存无独显但内存足够的办公机qwen2.5:7b4.7 GB8 GB 显存 / 16 GB 内存有入门独显综合推荐qwen2.5:14b9.0 GB16 GB 显存 / 32 GB 内存追求更好效果需要较强硬件实际装 7b 的时候注意一点8 GB 显存只够 q4_k_m 量化勉强放下显存占用会非常紧张建议把系统其他占用显存的应用关掉。如果显存不够选择 qwen2.5:3b 也比硬上一个跑不动的 7b 体验好很多至少不会生成到一半就 out of memory。3.5 更新模型与文件校验离线导入还有一个好处更新模型时不用重新走一遍 registry。如果官方发布了新版 GGUF重新下载文件把 Modelfile 里的 FROM 路径改成新文件再执行一次ollama create qwen2.5:3b -f ./Modelfile同名 tag 会被覆盖。这样 ollama list 里依然只有一个 qwen2.5:3b但内部已经是新模型。下载完成后最好校验一下文件。ModelScope 页面会给 sha256 值本地执行sha256sum 文件名进行比对防止文件损坏。GGUF 文件只要损坏了一个字节导入后很可能会在运行时出现奇怪的中断或乱码排查起来比报错还难受。4. 部署期常踩的坑4.1 Docker 容器里拉模型一直超时怎么办很多人喜欢用 Docker 方式跑 ollama但容器内拉模型时也会撞上同样的 dial tcp 超时。这往往是因为容器默认继承宿主机的 DNS 配置宿主机解析本来就慢或者失效容器自然跟着遭殃。解决办法是在 docker run 时显式指定 DNSdocker run -d --name ollama \ --dns 223.5.5.5 \ --dns 119.29.29.29 \ -v /opt/ollama:/root/.ollama \ -p 11434:11434 \ ollama/ollama如果容器内的 DNS 问题还是顽固Linux 上可以用--network host让容器直接使用宿主机网络栈DNS、端口都不用再额外操心。不过 host 网络模式下要注意端口冲突11434 被别的进程占了就会启动失败。另外容器数据目录最好挂载到宿主机磁盘像上面命令里的-v /opt/ollama:/root/.ollama。否则容器一旦删除里面已经下载的模型全部消失又要重新拉一遍这个教训我吃过。4.2 磁盘空间和模型存储位置ollama 模型文件默认存在当前用户的.ollama/models目录下。大模型动辄好几个 GB特别是 qwen 14b 这种加上下载过程中间的临时文件对磁盘的占用比想象中大。如果你打算把模型装到另一块盘比如 Windows 下的 D 盘或者 Linux 的/data分区需要设置一个环境变量。Windows 在系统环境变量里新增OLLAMA_MODELS值填D:\ollama\models然后重启 ollama 服务。Linux 下编辑 systemd 服务文件加一行EnvironmentOLLAMA_MODELS/data/ollama/models再systemctl daemon-reload systemctl restart ollama。如果是手动ollama serve方式启动的先export OLLAMA_MODELS/data/ollama/models再启动。改完存储路径后旧路径下的模型不会自动迁移需要手动移动。已经拉下来的模型文件可以直接把整个models目录搬过去。磁盘空间不足的时候用ollama rm 模型名清理不用的模型比直接删除文件更安全。4.3 导入模型后如何确认 GPU 生效离线导入的模型和 ollama 官方仓库里的模型没有区别ollama 会自动检测本机有没有可用 GPU。确认 GPU 是否生效最直观的方法是运行模型的同时另开一个终端执行nvidia-smi观察是否有 ollama 进程在占用显存。如果显存占用持续上升说明模型确实加载到了显卡上。一些优化参数也可以顺手加上。设置环境变量OLLAMA_FLASH_ATTENTION1可以降低 KV cache 的显存占用跑长文本时有明显帮助OLLAMA_KV_CACHE_TYPEq8_0可以进一步压缩缓存。但注意不同硬件对这几个参数的支持程度不同遇到生成变慢或行为异常时先恢复默认再排查。Windows 上首次跑 ollama 需要安装好 NVIDIA 驱动ollama 自带运行库不需要单独装 CUDA Toolkit。Linux 下要确认系统里有 nvidia-container-toolkit 才能在容器内正常调用显卡宿主机直接跑则主要看驱动。如果只有核显或者根本没有独立显卡CPU 照样可以跑小模型只是速度会慢一些跑 3b 模型作为日常用了完全够。4.4 常见报错速查表把部署期间常见的报错整理成一张速查表排查时可以先对号入座。报错关键字大概率原因处理动作lookup ... i/o timeoutDNS 解析超时改公共 DNS、查 hosts 文件、换离线下载connect: connection refusedollama 服务未启动或 11434 端口被占用检查ollama serve进程和端口占用EOF网络中断拉取过程被切断重新 pull新版 ollama 支持断点续传file does not existModelfile 里 FROM 路径错误改为绝对路径确认文件真实存在out of memory模型超过内存或显存容量换更小模型或更低量化manifest unknown模型 tag 写错了用ollama list确认可用 tagsegfault / 段错误服务进程异常升级 ollama 版本检查硬件驱动这张表基本覆盖了拉模型、导入、运行三个阶段的主要问题。实际排查时先看报错落在哪个阶段再根据表格对应的处理动作去做大多能很快定位。5. 一些个人经验补充最后说点我自己的体会。第一次遇到这个错误的时候我还在乖乖等它重试反复执行了十几次 pull大概浪费了二十多分钟后来换 DNS 之后立刻就能拉 qwen2.5:7b。还有一次是在内网环境里本机怎么改 DNS 都没用因为网络那边的解析配置我碰不到最后直接走 ModelScope 离线导入反而十分钟搞定了。所以两条腿走路非常重要:一条修 DNS 走官方源一条离线导入保证兜底。如果你后面打算把本地 qwen 接进 FastAPI、FastGPT、Dify 这些应用模型跑起来之后只需要把服务地址填成http://127.0.0.1:11434。FastAPI 里可以直接用 OpenAI 客户端挂这个地址本地服务本身就兼容 OpenAI 接口格式api_key 填一个随意字符串就能通。只要模型能在本地正常对话部署应用时基本不会再遇到网络层面的坑。还有一个小技巧新环境拿到手第一步先配好 DNS 再装 ollama能少踩很多坑。遇到 dial tcp 超时别一条命令反复试十几遍先花五分钟定位是解析问题还是连通问题效率高得多。这套思路不仅适用于 qwenollama 里其他模型遇到同样的报错都可以按这个流程处理。
返回列表