所有文章

OLLAMA_HOST=0.0.0.0 怎么设:Mac、Linux、Windows、Docker 一次讲清(v0.40.15 实测)

Ollama 不设 OLLAMA_HOST 就只监听 127.0.0.1:11434。我们在 v0.40.15 上用几种取值启动服务,实测监听地址和局域网能不能连,还测了 OLLAMA_ORIGINS。Mac、Linux、Windows、Docker 的设置步骤按官方 FAQ 整理。

Ollama OLLAMA_HOST=0.0.0.0:米色黏土羊驼服务器盒被薄荷绿网线环绕,两侧各有一台黏土笔记本,柔和自然光

先说结论:Ollama 不做任何设置时只监听 127.0.0.1:11434,也就是只有本机能连(官方 FAQ 原话:binds 127.0.0.1 port 11434 by default)。想让局域网里的其他设备连进来,用环境变量 OLLAMA_HOST 改监听地址,常见写法是 0.0.0.0:11434。关键是这个变量要设给服务进程,只在当前终端 export 一下,后台的 Ollama 应用或 systemd 服务读不到。我们 2026 年 11 月 10 日在 Linux 上用 Ollama v0.40.15 实测了几种取值,结果在下面。

实测:几种取值分别监听在哪

环境:Linux(容器),Ollama v0.40.15,同一台机器同时起几个服务,端口各不相同,不拉任何模型。「本机网卡 IP」指这台机器自己在局域网里的地址,用 curl 去访问 /api/version。

OLLAMA_HOST 的值日志里的 Listening用 127.0.0.1 访问用本机网卡 IP 访问
127.0.0.1:11601Listening on 127.0.0.1:11601通,返回 {"version":"0.40.15"}不通,没有返回
0.0.0.0:11602Listening on [::]:11602通通,返回 {"version":"0.40.15"}
0.0.0.0(不写端口)Listening on [::]:11434没单独测没单独测
:11603(只写端口)Listening on [::]:11603没单独测没单独测

几点读法:

  • 写 0.0.0.0 时 v0.40.15 的日志显示成 [::],ss -ltn 里是 *:11602,也就是监听所有网卡。我们没有单独测 IPv6 的访问。
  • 不写端口,端口回到默认的 11434。只写端口(:11603)同样监听所有网卡。
  • 「通」只说明网络层能连。我们用 curl 不带任何凭据就拿到了响应,也就是说监听到所有网卡后,同网段谁都能调用,下面「安全」一节专门讲这件事。

客户端也读同一个变量。在另一台机器上把 OLLAMA_HOST 指向服务端的 IP 和端口再跑 ollama list,我们实测能连上,返回了表头(NAME ID SIZE MODIFIED,因为没拉模型所以是空表)。本机没有服务时直接跑 ollama list,报错是:

Error: could not connect to ollama server, run 'ollama serve' to start it

四个平台怎么设(服务进程)

下面几条来自官方 FAQ,我们只在 Linux 上直接起了 ollama serve 测试,macOS、Windows、systemd、Docker 这几条没有在对应系统上跑过,按官方文档整理。

macOS(Ollama 应用)

launchctl setenv OLLAMA_HOST "0.0.0.0:11434"

然后退出并重新打开 Ollama 应用。

Linux(systemd 服务)

sudo systemctl edit ollama.service

在打开的编辑器里加入:

[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"

保存退出后:

sudo systemctl daemon-reload
sudo systemctl restart ollama

Windows

先在任务栏托盘里退出 Ollama,然后在「编辑账户的环境变量」里新建或修改用户变量 OLLAMA_HOST,值写 0.0.0.0:11434,点确定,再从开始菜单重新启动 Ollama。

Docker

官方镜像的 Dockerfile 里已经写了 ENV OLLAMA_HOST=0.0.0.0:11434(我们看了 GitHub 上的 Dockerfile,没有跑容器),所以容器内部本来就监听所有网卡。你要管的是端口映射:-p 11434:11434 是映射到宿主机所有网卡,想只给本机用就写 -p 127.0.0.1:11434:11434。另一个容器要连宿主机上的 Ollama 时,Docker Desktop 里可以用 host.docker.internal;Linux 上通常要给容器加 --add-host=host.docker.internal:host-gateway。端口映射的写法和这两点来自 Docker 的通用做法,不是 Ollama 官方文档,我们没有测。

怎么确认设好了

1. 在服务所在的机器上看监听:Linux 用 ss -ltn | grep 11434,看到 *:11434 或 0.0.0.0:11434 才是对外监听,127.0.0.1:11434 就还是只有本机。

2. 在另一台机器上:

curl http://服务端IP:11434/api/version

返回 {"version":"0.40.15"} 这样的 JSON 就通了。我们实测的返回就是这个格式。

3. 不通的话,先查防火墙是否放行了 11434(macOS、Windows、Linux 的防火墙都可能拦;这一条我们没测),再查客户端是不是还指着默认地址。

浏览器页面和扩展:OLLAMA_ORIGINS

OLLAMA_HOST 管「谁能连」,浏览器里的网页或扩展还要过跨域检查,这归 OLLAMA_ORIGINS 管。官方 FAQ 写的是:默认允许来自 127.0.0.1 和 0.0.0.0 的跨域请求,其他来源要用 OLLAMA_ORIGINS 加进去。我们在 v0.40.15 上用跨域预检请求(OPTIONS)测了:

设置来源预检结果
不设 OLLAMA_ORIGINShttp://localhost:3000204,带 Access-Control-Allow-*
不设 OLLAMA_ORIGINShttp://evil.example403 Forbidden
OLLAMA_ORIGINS=http://app.example.comhttp://app.example.com204
OLLAMA_ORIGINS=http://app.example.comhttp://other.example.com403

所以网页前端调 Ollama 报跨域,该改的是 OLLAMA_ORIGINS,不是 OLLAMA_HOST。浏览器扩展要把扩展自己的来源加进去,官方 FAQ 给了 chrome-extension://*,moz-extension://*,safari-web-extension://* 的写法,只放行你真的在用的那个更稳妥。

安全:0.0.0.0 等于对整个网络开放

  • 我们的实测里,不带任何凭据就能调用,所以不要把 11434 直接映射到公网(路由器端口转发、云主机安全组全放开都算)。
  • 只在可信的局域网里用。咖啡厅、宿舍、公司公共网段都不算。
  • 确实要远程用,官方 FAQ 的思路是放在反向代理后面(例子是 Nginx,另有 Cloudflare Tunnel),由代理负责加访问控制,Ollama 自己继续监听本机。
  • 只想让本机的其他程序访问(比如 Docker 容器里的应用),优先考虑只监听 127.0.0.1,或者按上面的端口映射写法限制来源。

常见问题

设了 OLLAMA_HOST 还是连不上本机的 127.0.0.1?

客户端也读这个变量。服务端设成 0.0.0.0:11434 没问题,但如果你终端里把 OLLAMA_HOST 设成了别的值,ollama list、ollama run 会去连那个地址。先 echo $OLLAMA_HOST 看看当前终端里是什么。

设置没生效怎么办?

多半是变量没进服务进程:macOS 要用 launchctl setenv 再重启应用,Linux 要写进 systemd 的 Environment= 再 daemon-reload 和 restart,Windows 要退出托盘里的 Ollama 再启动。同一个道理也适用于代理变量,见 max retries exceeded 的代理设置。

相关阅读

Ollama / llama.cpp 报错速查 · Ollama 上下文长度设置 · 本地大模型推荐

留下你的想法

你的邮箱不会公开。