ollama 提供的本地 api 地址

模型与算力

讲清 Ollama 本地 API 地址默认长什么样、怎么改监听地址与端口,以及连不上时按什么顺序排查。

本地跑着 Ollama,想在别的机器或容器里调它,结果 curl 一发就 connection refused;或者改了环境变量重启,地址还是老样子。这篇不聊模型选型,只把「地址从哪来、怎么改、改完怎么验」这条链路走一遍,顺带给你一份连不上时的排查顺序。

本地跑着 Ollama,想在另一台机器、容器或者局域网里的应用里调它,结果 curl 一发就是 connection refused。也有另一种情况:明明改了环境变量、重启过了,地址看上去还是老样子。这篇不聊模型选型,只把「地址从哪来、怎么改、改完怎么验」这条链路完整走一遍,最后给一份连不上时的排查顺序。

读之前先明确一点:地址问题九成不是 Ollama 的问题,而是「谁在监听、监听在哪、有没有放行」这三件事没对齐。下面按默认地址、怎么改、怎么验、客户端怎么写四步讲,每一步都带能直接照着做的动作。

默认地址长什么样,分几段看

一个 API 地址可以拆成协议、主机、端口三段。默认情况下 Ollama 只监听本机回环地址,所以同一台机器上的脚本能用,隔壁机器用不了。这就是最典型的「地址没错但连不上」——你复制的地址本身没写错,错的是它压根没对外开门。

协议
调用时写全 http 或 https,别指望客户端帮你猜
主机
回环地址只对本机可见;换成实际网卡地址或 0.0.0.0 才允许外部连入
端口
Ollama 有默认端口,冲突或想统一管理时改这一段比改主机省事

想确认你机器上实际生效的地址,别只看文档默认值,去两个地方看:启动时的服务日志,以及进程的监听状态(比如用 netstat 或 ss 看这个进程绑在哪个地址和端口上)。各家版本默认值可能不同,具体数值到 /tools 里的本地工具箱对照当时的说明。

# 看进程实际监听在哪个地址和端口
ss -lntp | grep ollama
# 或
netstat -lntp | grep ollama

怎么改:环境变量与启动参数两条路

改地址本质上只有两件事:让它监听在哪张网卡上,以及监听在哪个端口上。主机变量决定前者,只给回环就只有本机能访问,给到全部网卡才允许外部连入;端口变量决定后者。两个变量要成对确认,只改一个,很容易出现「以为改了其实没改」。

  1. 确认服务怎么被拉起来的是手动前台跑、systemd 托管,还是 Docker 容器?这决定你改的是当前 shell、服务单元,还是容器启动参数。
  2. 改对应的来源,不是改当前终端systemd 托管就去改服务单元里的环境变量;容器就改启动配置或容器编排文件。当前 shell 里 export 一下只对前台进程有效。
  3. 重启服务,别只重连客户端环境变量在进程启动时读取,不重启服务,改了也不生效。重启后再去看监听状态确认一次。
  4. 三种方式各测一次本机环回、本机实际网卡地址、另一台机器,逐个测。只测通一种不算改成功。

改主机时要权衡:监听全部网卡方便外部接入,但也意味着同网段里谁都能试;如果你的机器直接暴露在公网,别图省事就开全部网卡,先想清楚访问控制怎么做。这一点在共享办公网络或云主机上尤其重要。具体的安全组、访问控制配置差异很大,拿不准时到 /guides 看站内的接入类指南。

改完怎么验证,连不上按什么顺序查

验证的核心思路是逐层往外推:先本机环回,再本机实际网卡地址,最后跨机器。哪一层断掉,问题就出在那一层,不用一上来就怀疑模型或者密钥。

测试层怎么测不通说明什么
本机环回在本机用回环地址请求一次服务本身没起来或端口写错
本机网卡地址用本机实际 IP 请求一次服务没监听外部地址
跨机器从另一台机器请求监听、防火墙、网段三者之一有问题
云主机外部从公网访问安全组或端口映射没开
  • 跨机器不通,优先查服务是否真的监听了外部地址,而不是回环地址
  • 再查系统防火墙是否放行该端口,很多系统默认是拦的
  • 第三查两台机器是否在同一网段,能不能互相 ping 通
  • 云主机要单独看安全组,安全组不开的话本机怎么测都通、外面始终连不上
  • 容器场景里,容器内回环和宿主机回环是两个世界,要么用宿主网络,要么走容器网络里的服务名加内部端口

这套顺序能挡掉绝大多数「看起来像 Ollama 坏了」的误判。如果你排查到怀疑是中转或第三方接入层的问题,而不是本地监听的问题,那就不属于这篇的范围了,可以到 /sites 看站内的服务目录和可信度检测说明。

客户端那边怎么写地址

服务端监听对了,客户端填错照样连不上。填地址时优先写完整形式,把协议和端口都写全,少留靠默认值猜测的空间。同一台机器上的脚本用回环地址最稳,跨机器再换成实际网卡地址或域名。

如果你的程序是通过环境变量读地址配置的,要搞清楚它是覆盖还是追加——很多「改了没生效」其实是旧变量优先级更高。多环境切换时,把地址写进配置文件而不是硬编码在代码里,连不上时改一处就能立刻复测。

  • 验证顺序:先服务端监听状态,再客户端地址拼接,最后再看网络链路
  • 同一台机器优先回环,跨机器才用网卡地址或域名
  • 环境变量改完记得新开一个终端或重启进程,旧进程读的还是旧值
  • 地址写进配置文件,别散落在多个脚本里
  • 怀疑是接入层的地址问题时,对照 /tools/speed-test 的测试方式自己复测一次
下一步如果你要对比本地直连和走中转的差别,或者想确认自己的接入方式是否踩了常见坑,站内的工具目录和价格追踪页有现成的对照口径,去 /tools 和 /price-watch 核对当时的数字再决定怎么改。

常见问题

为什么本机能调通,别的机器连不上?

大概率是服务只监听了回环地址。回环地址只对本机可见,外部流量根本到不了进程。把主机变量改成允许外部访问并重启,再用另一台机器测一次;同时确认防火墙或云安全组放行了对应端口,这两步缺一个都还是连不上。

改了环境变量,为什么地址没变?

常见三种情况:服务没重启,变量只在启动时读取一次;变量写在当前 shell 里,但服务实际由 systemd 或容器托管,读的是另一份环境;或者同时存在多处配置,旧的那份优先级更高。改完去 /tools 里用本地工具箱确认实际监听状态,比看配置文件靠谱。

端口被别的程序占了怎么办?

先把监听状态查出来,看这个端口上到底是谁。能换端口就换个不冲突的,改完客户端地址记得同步改。不方便换端口就停掉占用它的进程,但要确认那个进程是不是别的服务在用,别顺手把线上东西关掉了。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。