setting OLLAMA_HOST to 0.0.0.0 could make the API to listen on the port using IPv6 only

在 Linux 上将 OLLAMA_HOST 设为 0.0.0.0 后,Ollama 仍可能只监听 IPv6( :::11434 ),此时通过 IPv4 或 Docker 容器内的 IPv4 地址访问会失败。优先排查系统 IPv6 绑定行为( bindv6only )以及 IPv4 端口是否可达。

快速结论:在 Linux 上将 OLLAMA_HOST 设为 0.0.0.0 后,Ollama 仍可能只监听 IPv6(:::11434),此时通过 IPv4 或 Docker 容器内的 IPv4 地址访问会失败。优先排查系统 IPv6 绑定行为(bindv6only)以及 IPv4 端口是否可达。

适用环境:Issue 已确认:Linux、Nvidia GPU、Ollama 0.1.32;后续评论提到 Ollama 0.5.7、0.3.13(Ubuntu snap 安装)仍有类似现象。

最快修复方案:暂无确认的一步修复方案。Issue 中提出“按 OLLAMA_HOST 解析:0.0.0.0 监听 IPv4、:: 监听 IPv6,或默认同时监听 IPv4/IPv6”仅属于建议,未在该 Issue 中验证为代码修复。可优先尝试显式指定 IPv4 地址,或在系统层面关闭 IPv6 后重启 Ollama(该做法来自评论反馈,并非官方修复)。

注意事项:修改 /proc/sys/net/ipv6/bindv6only、systemd BindIPv6Only 或通过 GRUB 永久禁用 IPv6 都会影响整机网络行为,需自行评估风险;这些方法不代表 Ollama 已修复该绑定问题。

问题场景

用户在 Linux 上通过 systemd(如 systemctl edit ollama.service 或 override.conf)设置 OLLAMA_HOST=0.0.0.0,期望 Ollama API 在 11434 端口对 IPv4 提供服务,但 netstat 显示仅存在 tcp6 :::11434 监听。该现象会导致从 Docker 容器(如 Open WebUI)使用 IPv4 访问宿主机 Ollama 时无响应;评论中还出现容器内 curl --ipv6 http://host.docker.internal:11434/api/tags 报 Could not resolve host 的情况。

报错原文

setting OLLAMA_HOST to 0.0.0.0 could make the API to listen on the port using IPv6 only

# netstat -anp | grep 11434
tcp6       0      0 :::11434                :::*                    LISTEN      5009/ollama

curl: (6) Could not resolve host: host.docker.internal

原因分析

最可能的原因是 Go 网络栈在特定系统配置下对通配地址 0.0.0.0 的处理方式:Issue 引用了 golang/go#48723,并指出当 systemd.socket 设置了 BindIPv6Only,或 /proc/sys/net/ipv6/bindv6only 为 1 时,监听可能只落在 IPv6 上。Issue 正文后也自我修正称:若正确设置 BindIPv6Only,0.0.0.0:11434 应使用 v4,因此该问题是否由系统配置单独导致尚未完全定论。评论中有人建议修改 Ollama 对 OLLAMA_HOST 的解析逻辑,使 0.0.0.0 对应 IPv4、:: 对应 IPv6,或默认双栈监听,但这只是可优先尝试的方向,并非已确认修复。

环境排查

  • 确认 Ollama 版本(Issue 为 0.1.32;评论中出现 0.5.7、0.3.13)与安装方式(二进制、systemd、snap 等)。
  • 确认 OLLAMA_HOST 实际生效值,检查 systemd override、环境变量和启动日志中的监听地址。
  • 检查 /proc/sys/net/ipv6/bindv6only 的值,以及 systemd socket 是否配置了 BindIPv6Only。
  • 使用 netstat -anp | grep 11434 或 ss -lntp | grep 11434 确认监听的是 0.0.0.0:11434 还是 :::11434。
  • 若涉及 Docker/Open WebUI,分别用 IPv4 与 IPv6 测试宿主机 11434 端口的可达性。

解决步骤

  1. 先记录当前监听状态:netstat -anp | grep 11434,确认是否只有 tcp6 :::11434。
  2. 检查系统 IPv6 绑定设置:查看 /proc/sys/net/ipv6/bindv6only,并检查 systemd socket 单元是否设置了 BindIPv6Only。若相关配置被启用,可优先尝试恢复为默认/关闭状态后重启 Ollama;此步骤为排查方向,未在 Issue 中确认可修复。
  3. 尝试在 OLLAMA_HOST 中显式使用具体 IPv4 地址而非 0.0.0.0,重启服务后观察监听是否变为 0.0.0.0:11434;该方法来自问题讨论中的思路,需结合实际网络访问需求评估。
  4. 若必须临时恢复 IPv4 访问,评论中有人通过 GRUB 永久禁用 IPv6 后使 Ollama 以 IPv4 模式监听;该操作影响整机,仅作为可优先尝试的临时手段,不建议长期使用。
  5. 若需要从 Docker 容器访问宿主机 Ollama,先在宿主机确认 IPv4 端口可访问,再在容器内用 curl --ipv4 http://host.docker.internal:11434/api/tags 验证;IPv6 容器网络需按 Docker 文档单独配置。

验证方法

重启 Ollama 后再次执行 netstat -anp | grep 11434,确认是否出现 tcp 0.0.0.0:11434 监听;在宿主机和容器内分别用 curl --ipv4 http://127.0.0.1:11434/api/tags(或对应宿主机地址)测试 API 是否返回响应。若仍只有 tcp6 :::11434,说明问题未解决。

参考来源

ollama/ollama #3961

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 29374

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注