当前位置: 首页 > news >正文

Docker 容器访问宿主机 Ollama 服务配置教程

Docker 容器访问宿主机 Ollama 服务配置教程

问题描述

当在 Docker 容器中的应用(如 RAGFlow)尝试连接宿主机上的 Ollama 服务时,会遇到以下错误:

CONNECTION_ERROR - litellm.APIConnectionError: Ollama_chatException - [Errno 111] Connection refused

问题原因

  • Ollama 默认配置:只监听 127.0.0.1:11434(本地回环地址)
  • Docker 容器网络隔离:容器内的 localhost 指向容器自身,无法访问宿主机的 127.0.0.1
  • 结果:Docker 容器无法连接到宿主机的 Ollama 服务

解决方案概述

让 Ollama 服务监听所有网络接口(0.0.0.0:11434),使其可以通过宿主机 IP 被 Docker 容器访问。


详细操作步骤

步骤 1:获取宿主机 IP 地址

hostname -I | awk '{print $1}'

示例输出

192.168.0.105

📝 记下这个 IP 地址,后续配置需要使用。


步骤 2:检查 Ollama 当前监听状态

sudo netstat -tuln | grep 11434

典型输出

tcp        0      0 127.0.0.1:11434         0.0.0.0:*               LISTEN

⚠️ 如果显示 127.0.0.1:11434,说明只监听本地,需要修改配置。


步骤 3:检查 Ollama 是否作为系统服务运行

sudo systemctl status ollama

如果返回服务状态信息,说明 Ollama 作为系统服务运行,需要修改服务配置文件。

如果提示服务不存在,Ollama 可能是手动启动的,可以直接用环境变量启动。


步骤 4:修改 Ollama 系统服务配置

4.1 查看当前配置
cat /etc/systemd/system/ollama.service
4.2 修改配置文件

使用以下命令修改配置文件,添加 OLLAMA_HOST 环境变量:

sudo nano /etc/systemd/system/ollama.service

或者直接使用命令一次性修改(推荐):

sudo tee /etc/systemd/system/ollama.service > /dev/null << 'EOF'
[Unit]
Description=Ollama Service
After=network-online.target[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/opt/TensorRT-10.9.0.34/bin:/opt/ros/humble/bin:/home/wanglin/miniconda3/bin:/home/wanglin/miniconda3/condabin:/usr/local/cuda-12.1/bin:/home/wanglin/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin"
Environment="OLLAMA_HOST=0.0.0.0:11434"[Install]
WantedBy=default.target
EOF

🔑 关键配置:Environment="OLLAMA_HOST=0.0.0.0:11434"


步骤 5:重新加载配置并重启服务

# 重新加载 systemd 配置
sudo systemctl daemon-reload# 重启 Ollama 服务
sudo systemctl restart ollama# 检查服务状态
sudo systemctl status ollama

步骤 6:验证配置是否生效

6.1 检查监听地址
sudo netstat -tuln | grep 11434

期望输出(监听所有接口):

tcp6       0      0 :::11434                :::*                    LISTEN

:::11434 表示监听所有网络接口(IPv4 和 IPv6)

6.2 测试通过宿主机 IP 访问
# 替换 192.168.0.105 为您的宿主机 IP
curl http://192.168.0.105:11434/api/tags

成功输出示例

{"models": [{"name": "deepseek-r1:1.5b","model": "deepseek-r1:1.5b",...}]
}
6.3 测试聊天功能
curl -X POST http://192.168.0.105:11434/api/generate \-d '{"model": "deepseek-r1:1.5b", "prompt": "你好", "stream": false}'

步骤 7:在 RAGFlow(或其他 Docker 应用)中配置

配置参数

访问 RAGFlow 模型设置页面:http://localhost:8880/user-setting/model

Ollama 配置

  • Base URL / API 地址http://192.168.0.105:11434
  • 模型名称deepseek-r1:1.5b(或其他已安装的模型)
  • API Key:留空(Ollama 本地服务不需要)

⚠️ 重要

  • ✅ 使用宿主机 IP:http://192.168.0.105:11434
  • ❌ 不要使用:http://localhost:11434http://127.0.0.1:11434

防火墙配置(可选)

如果系统启用了防火墙,需要开放 11434 端口:

Ubuntu/Debian (UFW)

sudo ufw allow 11434/tcp
sudo ufw reload

CentOS/RHEL (firewalld)

sudo firewall-cmd --permanent --add-port=11434/tcp
sudo firewall-cmd --reload

常见问题排查

问题 1:容器仍然无法连接

检查项

  1. 确认 Ollama 监听地址是否正确:

    sudo netstat -tuln | grep 11434
    
  2. 测试宿主机 IP 是否可访问:

    curl http://192.168.0.105:11434/api/tags
    
  3. 检查防火墙规则

问题 2:Docker 网络模式为 host

如果 Docker 使用 --network host 模式,可以直接使用 localhost:11434

问题 3:宿主机 IP 地址变化

如果使用 DHCP 动态 IP,可以考虑:

  • 配置静态 IP 地址
  • 使用 host.docker.internal(部分 Docker 版本支持)
  • 在 Docker 启动时添加:--add-host=host.docker.internal:host-gateway

完整快捷脚本

将以下内容保存为 configure_ollama_for_docker.sh

#!/bin/bashecho "🚀 开始配置 Ollama 以支持 Docker 容器访问..."# 获取宿主机 IP
HOST_IP=$(hostname -I | awk '{print $1}')
echo "📍 宿主机 IP: $HOST_IP"# 修改 Ollama 服务配置
echo "🔧 修改 Ollama 服务配置..."
sudo tee /etc/systemd/system/ollama.service > /dev/null << 'EOF'
[Unit]
Description=Ollama Service
After=network-online.target[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/opt/TensorRT-10.9.0.34/bin:/opt/ros/humble/bin:/home/wanglin/miniconda3/bin:/home/wanglin/miniconda3/condabin:/usr/local/cuda-12.1/bin:/home/wanglin/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin"
Environment="OLLAMA_HOST=0.0.0.0:11434"[Install]
WantedBy=default.target
EOF# 重新加载并重启服务
echo "🔄 重启 Ollama 服务..."
sudo systemctl daemon-reload
sudo systemctl restart ollama# 等待服务启动
sleep 3# 验证配置
echo "✅ 验证配置..."
if sudo netstat -tuln | grep -q ":::11434"; thenecho "✅ Ollama 已成功监听所有网络接口"
elseecho "❌ Ollama 监听配置可能有问题"
fi# 测试访问
echo "🧪 测试访问..."
if curl -s http://$HOST_IP:11434/api/tags > /dev/null; thenecho "✅ 通过宿主机 IP 访问成功"echo ""echo "📋 请在 Docker 应用中使用以下配置:"echo "   Base URL: http://$HOST_IP:11434"echo "   模型名称: deepseek-r1:1.5b"
elseecho "❌ 访问失败,请检查防火墙设置"
fi

使用方法

chmod +x configure_ollama_for_docker.sh
./configure_ollama_for_docker.sh

手动启动方式(非系统服务)

如果 Ollama 不是作为系统服务运行,可以使用以下方式启动:

# 停止当前运行的 Ollama
pkill ollama# 设置环境变量并启动
export OLLAMA_HOST=0.0.0.0:11434
nohup ollama serve > /tmp/ollama.log 2>&1 &# 验证
sleep 2
netstat -tuln | grep 11434

安全提示

⚠️ 注意事项

  1. 局域网访问:配置后 Ollama 可被局域网内其他设备访问
  2. 生产环境:建议配置防火墙规则,只允许特定 IP 访问
  3. 敏感数据:不要在公网环境中暴露 Ollama 服务

限制访问的防火墙规则

# 只允许 Docker 网桥访问
sudo ufw allow from 172.17.0.0/16 to any port 11434# 或只允许特定 IP 段
sudo ufw allow from 192.168.0.0/24 to any port 11434

总结

通过修改 Ollama 服务配置,将监听地址从 127.0.0.1:11434 改为 0.0.0.0:11434,使得 Docker 容器可以通过宿主机 IP 地址访问 Ollama 服务。

关键步骤

  1. ✅ 获取宿主机 IP 地址
  2. ✅ 修改 Ollama 服务配置添加 OLLAMA_HOST=0.0.0.0:11434
  3. ✅ 重启服务并验证
  4. ✅ 在 Docker 应用中使用 http://宿主机IP:11434

配置完成后,所有 Docker 容器中的应用都可以通过宿主机 IP 访问 Ollama 服务了!


参考资料

  • Ollama 官方文档
  • Docker 网络配置
  • RAGFlow 文档

文档版本:v1.0
更新时间:2025-10-14
适用系统:Ubuntu 20.04+, Debian 11+, CentOS 8+

http://www.dtcms.com/a/483133.html

相关文章:

  • 可以做彩页的网站ps做图哪个网站好
  • 使用Spring Boot构建数据访问层
  • 小白测评做网站免费网页制作有哪些
  • 潍坊专业建站wordpress视频分享
  • Vue 的响应式更新时机 + 异步录音事件回调造成状态“延后更新”或异步竞态问题(race condition)
  • 台州公司网站建设可以搜索附近手机的软件
  • 东莞营销网站建设多少钱淘宝客网站源码和模版有什么区别
  • electron启动页
  • 做公众号试卷的网站网站项目验收确认书
  • 玉儿做春梦网站中信建设有限责任公司ipo
  • word、pdf文档内容提取工具类
  • 【OpenHarmony多媒体开发大总结】从播放到转码全流程+实测踩坑便签,一文打通AVPlayer/SoundPool/录屏/缩略图/元数据提取
  • 02117 信息组织【第六章】
  • 【Linux内核】Linux内核裁剪完全指南:从理论到实战的系统优化
  • 旅游公司网站难做吗外贸英文网站模板
  • 尚品本色木门网站是哪个公司做的猎头做单网站
  • Linux的动态库和静态库
  • 参透测试(1):普通权限弱口令/弱加密方式/未授权访问
  • 嘉兴专业网站排名推广网站建设的后期服务要包括什么软件
  • 统计订单总数并列出排名
  • **标题:发散创新:探索Deno框架下的应用开发之旅**摘要:本文将深入探讨Den
  • 网站icp备案新规药品网站 icp
  • Linux对象管理机制
  • 网站建设实训考试做电商的步骤
  • 微信小程序uni.request 返回值存在精度丢失问题
  • 做外贸上哪些网站鹤壁集团网站建设
  • 惠城网站建设有哪些网站建设欧美
  • 注册 区块链节点
  • 硅谷甄选(续2)首页
  • 茂名建设公司网站wordpress写书typecho主题