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 不做任何设置时只监听 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:11601 | Listening on 127.0.0.1:11601 | 通,返回 {"version":"0.40.15"} | 不通,没有返回 |
0.0.0.0:11602 | Listening 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_ORIGINS | http://localhost:3000 | 204,带 Access-Control-Allow-* |
不设 OLLAMA_ORIGINS | http://evil.example | 403 Forbidden |
OLLAMA_ORIGINS=http://app.example.com | http://app.example.com | 204 |
OLLAMA_ORIGINS=http://app.example.com | http://other.example.com | 403 |
所以网页前端调 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 的代理设置。