以下是解决 **MaxKB 与 Ollama 因不同网络环境导致 API 域名无效**的常见方案:
以下是解决 MaxKB 与 Ollama 因不同网络环境导致 API 域名无效的常见方案:
问题原因
网络隔离:MaxKB 运行在 Docker 容器内,而 Ollama 运行在宿主机本地,两者默认处于不同网络环境。
域名解析失败:MaxKB 容器内无法直接通过 localhost 或 127.0.0.1 访问宿主机的 Ollama 服务。
解决方案
1. 配置 Ollama 允许外部访问
确保 Ollama 服务绑定到宿主机的 所有网络接口(而不仅是 localhost):
修改 Ollama 启动配置(如使用 systemd):
bash
复制
# 编辑 Ollama 服务文件
sudo nano /etc/systemd/system/ollama.service
在 [Service] 部分添加环境变量:
ini
复制
Environment="OLLAMA_HOST=0.0.0.0:11434"
重启服务:
bash
复制
sudo systemctl daemon-reload
sudo systemctl restart ollama
2. 在 MaxKB 中配置 Ollama 的宿主 IP
将 MaxKB 连接 Ollama 的地址从 localhost 改为宿主机的 实际 IP 或 Docker 内部域名:
方法 1:使用宿主机 IP(如 192.168.1.100):
yaml
复制
# 在 MaxKB 的配置文件(或界面)中设置
ollama_api_url: http://192.168.1.100:11434
方法 2:使用 Docker 专用域名 host.docker.internal(仅限 Docker Desktop 或 Linux 容器):
yaml
复制
ollama_api_url: http://host.docker.internal:11434
3. 调整 Docker 网络模式
将 MaxKB 容器与宿主机共享网络(需谨慎,可能影响安全性):
启动 MaxKB 容器时添加 --network host:
bash
复制
docker run --network host -d maxkb-image
此时容器内可直接通过 localhost:11434 访问 Ollama。
4. 验证网络连通性
在 MaxKB 容器内执行命令,测试是否能访问 Ollama:
bash
复制
# 进入容器 Shell
docker exec -it maxkb-container /bin/bash
# 测试连通性(替换为实际 IP)
curl http://host.docker.internal:11434/api/tags
# 或
curl http://192.168.1.100:11434/api/tags
若返回 Ollama 模型列表,则网络已通。
5. 检查防火墙
确保宿主机防火墙允许 Docker 容器访问指定端口(如 11434):
bash
复制
# 开放端口(示例)
sudo ufw allow 11434/tcp
总结
推荐方案:优先使用 host.docker.internal 或宿主机 IP 配置 Ollama 地址(步骤 2)。
调试工具:通过 curl 或 telnet 验证容器与宿主机的网络连通性。
安全提醒:若开放 Ollama 到公网,需配置身份验证(如反向代理 + HTTPS)。
浙公网安备 33010602011771号