maxkb容器里访问ollama api域名

模型与算力

讲清 MaxKB 容器里该用哪个地址访问 Ollama API,卡在 localhost 不通、域名解析失败时按步骤排查。

MaxKB 用 Docker 跑、Ollama 装在宿主机,这是最常见的组合。填 localhost 一定连不上,因为那指的是容器自己;填了宿主机域名又可能解析不到或者被防火墙挡。这篇按「先判网络关系、再定写什么地址、最后逐项排查」的顺序讲,只讲容器内访问这一件事,不重复模型选型和部署方案。

MaxKB 用 Docker 跑、Ollama 装在宿主机,这是最常见的组合。填 localhost 一定连不上,因为容器里的 localhost 指的是容器自己,不是你的宿主机。填了宿主机域名又可能解析不到,或者被防火墙挡在门外。这篇按「先判网络关系、再定写什么地址、最后逐项排查」的顺序讲,只讲容器内访问 Ollama API 这一件事。

下面所有操作都在 MaxKB 容器里或者 Docker 宿主机上做,先别急着改 MaxKB 后台配置,先把「能不能通」验证出来。改配置是最后一步,不是第一步。

先搞清楚两个东西跑在哪

地址怎么写,完全取决于 Ollama 和 MaxKB 各自的运行位置。三种常见拓扑,地址写法完全不同,先对号入座再动手。

拓扑Ollama 在哪容器里能用的地址类型
各自独立装宿主机或另一台机器宿主机网关地址 / 内网域名
都在 Docker 不同网络Docker 容器先并入同一网络,再用服务名
都在 Docker 同一网络Docker 容器直接用 compose 服务名
MaxKB 在容器、Ollama 在宿主宿主机进程网桥网关地址,别用 127.0.0.1
  1. 进容器docker exec -it 你的maxkb容器名 bash,先确认自己在容器里,不是宿主机上。
  2. 看容器自己的地址执行 hostname -I,记下容器拿到的 IP 和网段,后面判断网关地址有用。
  3. 先试连通性直接 curl 目标地址加端口,看返回是连接拒绝、超时还是域名解析失败,症状不同改法不同。
  4. 别上来就改配置MaxKB 后台填错一次保存一次,日志会变乱,先在命令行测通再回填。

两家都在 Docker 时,与其拼域名,不如先确认是否在同一自定义网络里。用 docker network inspect 看两个容器挂在哪个网络下,不在同一网络,写什么地址都连不上。

容器里该填哪个地址:三类可选方案

确认完拓扑,接下来选一类方案。三类没有绝对优劣,只看你的部署现状,能不动就少动。

  • 宿主机网关方案:容器内用宿主机在 Docker 网桥上的网关地址(一般是网桥网段的 .1),前提是 Ollama 监听 0.0.0.0。不同平台网关地址不一样,别照抄别人的,自己 hostname -I 和 ip route 里查。
  • 服务名方案:把 Ollama 也写进 compose,用 compose 里的服务名当主机名,前提是同一个 network。这是最稳的一类做法,容器重启后地址也不飘,推荐新建部署直接这么干。
  • 外部域名方案:走内网 DNS 或 hosts 解析的域名,适合 Ollama 在另一台机器。要确认容器用的是哪套 DNS,容器默认继承宿主 DNS,不一定能解析你内网的域名。
  • 端口一律按 Ollama 实际监听的端口填。改过端口的,先到 ollama_host 设置(/ollama-host-env-setting) 对照格式,别凭记忆填。

域名方案最容易翻车的地方在 DNS。容器默认拿的是宿主机的 resolv.conf,如果宿主用了 systemd-resolved 或者公司内网 DNS,容器里未必继承得到。测试方法就是在容器里 ping 一下那个域名,解析不出来就先别折腾 MaxKB 配置。

# 在 MaxKB 容器里依次执行,判断走哪条路\nhostname -I\nip route\ncat /etc/resolv.conf\ncurl -v http://目标地址:端口/

如果选的是原生接口还是兼容接口,地址后面要不要带 /v1 也不一样。建议先固定一个最简请求测通,再加路径。接口形态的差别可以到 工具与测速(/tools/speed-test) 里对照着测,先测通再谈调用。

Ollama 那一侧必须先放开监听

容器连不上,很多时候不是 MaxKB 填错了,是 Ollama 根本没让外面连进来。默认配置只监听回环地址,容器从外面根本够不着。

监听地址
要让容器访问,得把监听地址改成 0.0.0.0 或指定网卡地址,改完必须重启 Ollama 服务才生效。
监听范围
只暴露给内网或指定网段,公网可达等于把本地模型接口公开,风险口径到 安全与合规(/safety) 一节看。
验证监听
用 ss -lntp 或 netstat -lntp 确认端口真的处于 LISTEN,而不是只看配置文件写没写。
端口一致
MaxKB 里填的端口必须和实际监听端口一致,改过端口的尤其容易填错。
  1. 改监听配置把 Ollama 的监听地址从回环改成对外开放的地址,保存配置。
  2. 重启服务重启 Ollama,让新监听配置生效,配置改了不重启等于没改。
  3. 确认监听在宿主机上执行 ss -lntp,确认目标端口在 LISTEN 状态,且绑定地址不是只有 127.0.0.1。
  4. 从容器验证回到 MaxKB 容器里 curl 一次,能返回内容才算 Ollama 这侧配好了。

连不通时的排查顺序

连不通别靠猜,按下面的顺序走,每步都能缩小范围。顺序错了容易在无关环节浪费时间。

  1. 容器内 curl 看症状报连接拒绝是端口没开或地址错,报域名解析失败才是 DNS 问题。两类症状对应两套改法,先分清。
  2. 宿主上确认服务在宿主机本机访问一次 Ollama,排除服务本身没起来。服务没起先看 ollama 没有 service(/ollama-service-missing-linux) 这类基础排查。
  3. 查防火墙和网段宿主防火墙、云主机安全组、Docker 的 iptables 规则都可能拦。企业内网还要查有没有代理强制走转发。
  4. 看 MaxKB 日志原文最后再看 MaxKB 日志里的真实报错关键词来定位,别凭印象猜。
症状大概率原因先查什么
connection refused端口没开或地址错ss -lntp 看监听
timeout防火墙或网段拦iptables、安全组
域名解析失败容器 DNS 问题容器内 cat resolv.conf
404 或路径报错接口路径不对接口形态与 /v1 前缀

如果上面的顺序走完还是不通,多数情况下剩下两个原因:一是容器网络被单独隔离,二是内网 DNS 和宿主不一致。这两种都在容器里直接验证,不用回 MaxKB 后台。模型选型和部署方案本身不在本篇范围里,价格和可用性这类数字到 价格追踪(/price-watch) 核对当时的数字。

先确认在哪跑、能不能通,再决定填什么地址;顺序反了,改十次配置也是白改。
下一步如果你手上同时有官方 API 和中转站在用,建议顺手看一下各家当时的可用状态和接入方式,避免地址刚配通、入口又变。

常见问题

MaxKB 里填 localhost 或 127.0.0.1 为什么连不上 Ollama?

因为这两个地址在容器内部指向容器自己,不是宿主机。MaxKB 跑在容器里,请求 localhost 只会问到它自己的网络栈,那里没有 Ollama。要把目标改成宿主机在容器网络里的地址、或者 compose 里的服务名,并且确认 Ollama 已经监听在能被外部访问的地址上。

用服务名当域名连,为什么有时候行有时候不行?

多半是网络不一致。服务名解析只在同一个 Docker 自定义网络里有效,容器被拆到不同 compose 项目或不同 network 就解析不了;另外容器重启后网络可能变化。稳定的做法是让 MaxKB 和 Ollama 处在同一个 compose 的同一个 network 里,而不是靠手工指定。

改完地址还是超时,最该先查什么?

先在容器里 curl 一次目标地址,看报的是拒绝连接还是超时。拒绝连接说明地址对但端口没监听,回去查 Ollama 的监听配置;超时说明包发出去没人应答,多半是防火墙、安全组或网关地址写错。把这两类分开,排查范围立刻小一半。

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