以下是解决 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号