Docker容器访问宿主机Ollama服务配置详细操作步骤
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">问题描述</a></li><li><a href="#_label1">问题原因</a></li><li><a href="#_label2">解决方案概述</a></li><li><a href="#_label3">详细操作步骤</a></li><ul class="second_class_ul"><li><a href="#_lab2_3_0">步骤 1:获取宿主机 IP 地址</a></li><li><a href="#_lab2_3_1">步骤 2:检查 Ollama 当前监听状态</a></li><li><a href="#_lab2_3_2">步骤 3:检查 Ollama 是否作为系统服务运行</a></li><li><a href="#_lab2_3_3">步骤 4:修改 Ollama 系统服务配置</a></li><ul class="third_class_ul"><li><a href="#_label3_3_3_0">4.1 查看当前配置</a></li><li><a href="#_label3_3_3_1">4.2 修改配置文件</a></li></ul><li><a href="#_lab2_3_4">步骤 5:重新加载配置并重启服务</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_3_5">步骤 6:验证配置是否生效</a></li><ul class="third_class_ul"><li><a href="#_label3_3_5_2">6.1 检查监听地址</a></li><li><a href="#_label3_3_5_3">6.2 测试通过宿主机 IP 访问</a></li><li><a href="#_label3_3_5_4">6.3 测试聊天功能</a></li></ul><li><a href="#_lab2_3_6">步骤 7:在 RAGFlow(或其他 Docker 应用)中配置</a></li><ul class="third_class_ul"><li><a href="#_label3_3_6_5">配置参数</a></li></ul></ul><li><a href="#_label4">防火墙配置(可选)</a></li><ul class="second_class_ul"><li><a href="#_lab2_4_7">Ubuntu/Debian (UFW)</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_4_8">CentOS/RHEL (firewalld)</a></li><ul class="third_class_ul"></ul></ul><li><a href="#_label5">常见问题排查</a></li><ul class="second_class_ul"><li><a href="#_lab2_5_9">问题 1:容器仍然无法连接</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_5_10">问题 2:Docker 网络模式为 host</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_5_11">问题 3:宿主机 IP 地址变化</a></li><ul class="third_class_ul"></ul></ul><li><a href="#_label6">完整快捷脚本</a></li><ul class="second_class_ul"></ul><li><a href="#_label7">手动启动方式(非系统服务)</a></li><ul class="second_class_ul"></ul><li><a href="#_label8">安全提示</a></li><ul class="second_class_ul"></ul><li><a href="#_label9">总结</a></li><ul class="second_class_ul"></ul><li><a href="#_label10">参考资料</a></li><ul class="second_class_ul"></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>问题描述</h2><p>当在 Docker 容器中的应用(如 RAGFlow)尝试连接宿主机上的 Ollama 服务时,会遇到以下错误:</p>
<div class="jb51code"><pre class="brush:ps;">CONNECTION_ERROR - litellm.APIConnectionError: Ollama_chatException - Connection refused
</pre></div>
<p class="maodian"><a name="_label1"></a></p><h2>问题原因</h2>
<ul><li><strong>Ollama 默认配置</strong>:只监听 <code>127.0.0.1:11434</code>(本地回环地址)</li><li><strong>Docker 容器网络隔离</strong>:容器内的 <code>localhost</code> 指向容器自身,无法访问宿主机的 <code>127.0.0.1</code></li><li><strong>结果</strong>:Docker 容器无法连接到宿主机的 Ollama 服务</li></ul>
<p class="maodian"><a name="_label2"></a></p><h2>解决方案概述</h2>
<p>让 Ollama 服务监听所有网络接口(<code>0.0.0.0:11434</code>),使其可以通过宿主机 IP 被 Docker 容器访问。</p>
<p class="maodian"><a name="_label3"></a></p><h2>详细操作步骤</h2>
<p class="maodian"><a name="_lab2_3_0"></a></p><h3>步骤 1:获取宿主机 IP 地址</h3>
<div class="jb51code"><pre class="brush:ps;">hostname -I | awk '{print $1}'
</pre></div>
<p><strong>示例输出</strong>:</p>
<div class="jb51code"><pre class="brush:ps;">192.168.0.105
</pre></div>
<blockquote><p>📝 记下这个 IP 地址,后续配置需要使用。</p></blockquote>
<p class="maodian"><a name="_lab2_3_1"></a></p><h3>步骤 2:检查 Ollama 当前监听状态</h3>
<div class="jb51code"><pre class="brush:ps;">sudo netstat -tuln | grep 11434
</pre></div>
<p><strong>典型输出</strong>:</p>
<div class="jb51code"><pre class="brush:ps;">tcp 0 0 127.0.0.1:11434 0.0.0.0:* LISTEN
</pre></div>
<blockquote><p>⚠️ 如果显示 <code>127.0.0.1:11434</code>,说明只监听本地,需要修改配置。</p></blockquote>
<p class="maodian"><a name="_lab2_3_2"></a></p><h3>步骤 3:检查 Ollama 是否作为系统服务运行</h3>
<div class="jb51code"><pre class="brush:ps;">sudo systemctl status ollama
</pre></div>
<p><strong>如果返回服务状态信息</strong>,说明 Ollama 作为系统服务运行,需要修改服务配置文件。</p>
<p><strong>如果提示服务不存在</strong>,Ollama 可能是手动启动的,可以直接用环境变量启动。</p>
<p class="maodian"><a name="_lab2_3_3"></a></p><h3>步骤 4:修改 Ollama 系统服务配置</h3>
<p class="maodian"><a name="_label3_3_3_0"></a></p><h4>4.1 查看当前配置</h4>
<div class="jb51code"><pre class="brush:ps;">cat /etc/systemd/system/ollama.service
</pre></div>
<p class="maodian"><a name="_label3_3_3_1"></a></p><h4>4.2 修改配置文件</h4>
<p>使用以下命令修改配置文件,添加 <code>OLLAMA_HOST</code> 环境变量:</p>
<div class="jb51code"><pre class="brush:ps;">sudo nano /etc/systemd/system/ollama.service
</pre></div>
<p>或者直接使用命令一次性修改(推荐):</p>
<div class="jb51code"><pre class="brush:ps;">sudo tee /etc/systemd/system/ollama.service > /dev/null << 'EOF'
Description=Ollama Service
After=network-online.target
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"
WantedBy=default.target
EOF
</pre></div>
<blockquote><p>🔑 关键配置:<code>Environment="OLLAMA_HOST=0.0.0.0:11434"</code></p></blockquote>
<p class="maodian"><a name="_lab2_3_4"></a></p><h3>步骤 5:重新加载配置并重启服务</h3>
<div class="jb51code"><pre class="brush:ps;"># 重新加载 systemd 配置
sudo systemctl daemon-reload
# 重启 Ollama 服务
sudo systemctl restart ollama
# 检查服务状态
sudo systemctl status ollama
</pre></div>
<p class="maodian"><a name="_lab2_3_5"></a></p><h3>步骤 6:验证配置是否生效</h3>
<p class="maodian"><a name="_label3_3_5_2"></a></p><h4>6.1 检查监听地址</h4>
<div class="jb51code"><pre class="brush:ps;">sudo netstat -tuln | grep 11434
</pre></div>
<p><strong>期望输出</strong>(监听所有接口):</p>
<div class="jb51code"><pre class="brush:ps;">tcp6 0 0 :::11434 :::* LISTEN
</pre></div>
<blockquote><p>✅ <code>:::11434</code> 表示监听所有网络接口(IPv4 和 IPv6)</p></blockquote>
<p class="maodian"><a name="_label3_3_5_3"></a></p><h4>6.2 测试通过宿主机 IP 访问</h4>
<div class="jb51code"><pre class="brush:ps;"># 替换 192.168.0.105 为您的宿主机 IP
curl http://192.168.0.105:11434/api/tags
</pre></div>
<p><strong>成功输出示例</strong>:</p>
<div class="jb51code"><pre class="brush:json;">{
"models": [
{
"name": "deepseek-r1:1.5b",
"model": "deepseek-r1:1.5b",
...
}
]
}
</pre></div>
<p class="maodian"><a name="_label3_3_5_4"></a></p><h4>6.3 测试聊天功能</h4>
<div class="jb51code"><pre class="brush:ps;">curl -X POST http://192.168.0.105:11434/api/generate \
-d '{"model": "deepseek-r1:1.5b", "prompt": "你好", "stream": false}'
</pre></div>
<p class="maodian"><a name="_lab2_3_6"></a></p><h3>步骤 7:在 RAGFlow(或其他 Docker 应用)中配置</h3>
<p class="maodian"><a name="_label3_3_6_5"></a></p><h4>配置参数</h4>
<p>访问 RAGFlow 模型设置页面:<code>http://localhost:8880/user-setting/model</code></p>
<p><strong>Ollama 配置</strong>:</p>
<ul><li><strong>Base URL / API 地址</strong>:<code>http://192.168.0.105:11434</code></li><li><strong>模型名称</strong>:<code>deepseek-r1:1.5b</code>(或其他已安装的模型)</li><li><strong>API Key</strong>:留空(Ollama 本地服务不需要)</li></ul>
<blockquote><p>⚠️ <strong>重要</strong>:</p>
<ul><li>✅ 使用宿主机 IP:<code>http://192.168.0.105:11434</code></li><li>❌ 不要使用:<code>http://localhost:11434</code> 或 <code>http://127.0.0.1:11434</code></li></ul></blockquote>
<p class="maodian"><a name="_label4"></a></p><h2>防火墙配置(可选)</h2>
<p>如果系统启用了防火墙,需要开放 11434 端口:</p>
<p class="maodian"><a name="_lab2_4_7"></a></p><h3>Ubuntu/Debian (UFW)</h3>
<div class="jb51code"><pre class="brush:ps;">sudo ufw allow 11434/tcp
sudo ufw reload
</pre></div>
<p class="maodian"><a name="_lab2_4_8"></a></p><h3>CentOS/RHEL (firewalld)</h3>
<div class="jb51code"><pre class="brush:ps;">sudo firewall-cmd --permanent --add-port=11434/tcp
sudo firewall-cmd --reload
</pre></div>
<p class="maodian"><a name="_label5"></a></p><h2>常见问题排查</h2>
<p class="maodian"><a name="_lab2_5_9"></a></p><h3>问题 1:容器仍然无法连接</h3>
<p><strong>检查项</strong>:</p>
<ol><li><p>确认 Ollama 监听地址是否正确:</p>
<div class="jb51code"><pre class="brush:ps;">sudo netstat -tuln | grep 11434
</pre></div></li><li><p>测试宿主机 IP 是否可访问:</p>
<div class="jb51code"><pre class="brush:ps;">curl http://192.168.0.105:11434/api/tags
</pre></div></li><li><p>检查防火墙规则</p></li></ol>
<p class="maodian"><a name="_lab2_5_10"></a></p><h3>问题 2:Docker 网络模式为 host</h3>
<p>如果 Docker 使用 <code>--network host</code> 模式,可以直接使用 <code>localhost:11434</code>。</p>
<p class="maodian"><a name="_lab2_5_11"></a></p><h3>问题 3:宿主机 IP 地址变化</h3>
<p>如果使用 DHCP 动态 IP,可以考虑:</p>
<ul><li>配置静态 IP 地址</li><li>使用 <code>host.docker.internal</code>(部分 Docker 版本支持)</li><li>在 Docker 启动时添加:<code>--add-host=host.docker.internal:host-gateway</code></li></ul>
<p class="maodian"><a name="_label6"></a></p><h2>完整快捷脚本</h2>
<p>将以下内容保存为 <code>configure_ollama_for_docker.sh</code>:</p>
<div class="jb51code"><pre class="brush:ps;">#!/bin/bash
echo "🚀 开始配置 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'
Description=Ollama Service
After=network-online.target
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"
WantedBy=default.target
EOF
# 重新加载并重启服务
echo "🔄 重启 Ollama 服务..."
sudo systemctl daemon-reload
sudo systemctl restart ollama
# 等待服务启动
sleep 3
# 验证配置
echo "✅ 验证配置..."
if sudo netstat -tuln | grep -q ":::11434"; then
echo "✅ Ollama 已成功监听所有网络接口"
else
echo "❌ Ollama 监听配置可能有问题"
fi
# 测试访问
echo "🧪 测试访问..."
if curl -s http://$HOST_IP:11434/api/tags > /dev/null; then
echo "✅ 通过宿主机 IP 访问成功"
echo ""
echo "📋 请在 Docker 应用中使用以下配置:"
echo " Base URL: http://$HOST_IP:11434"
echo " 模型名称: deepseek-r1:1.5b"
else
echo "❌ 访问失败,请检查防火墙设置"
fi
</pre></div>
<p><strong>使用方法</strong>:</p>
<div class="jb51code"><pre class="brush:ps;">chmod +x configure_ollama_for_docker.sh
./configure_ollama_for_docker.sh
</pre></div>
<p class="maodian"><a name="_label7"></a></p><h2>手动启动方式(非系统服务)</h2>
<p>如果 Ollama 不是作为系统服务运行,可以使用以下方式启动:</p>
<div class="jb51code"><pre class="brush:ps;"># 停止当前运行的 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
</pre></div>
<p class="maodian"><a name="_label8"></a></p><h2>安全提示</h2>
<p>⚠️ <strong>注意事项</strong>:</p>
<ol><li><strong>局域网访问</strong>:配置后 Ollama 可被局域网内其他设备访问</li><li><strong>生产环境</strong>:建议配置防火墙规则,只允许特定 IP 访问</li><li><strong>敏感数据</strong>:不要在公网环境中暴露 Ollama 服务</li></ol>
<p><strong>限制访问的防火墙规则</strong>:</p>
<div class="jb51code"><pre class="brush:ps;"># 只允许 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
</pre></div>
<p class="maodian"><a name="_label9"></a></p><h2>总结</h2>
<p>通过修改 Ollama 服务配置,将监听地址从 <code>127.0.0.1:11434</code> 改为 <code>0.0.0.0:11434</code>,使得 Docker 容器可以通过宿主机 IP 地址访问 Ollama 服务。</p>
<p><strong>关键步骤</strong>:</p>
<ol><li>✅ 获取宿主机 IP 地址</li><li>✅ 修改 Ollama 服务配置添加 <code>OLLAMA_HOST=0.0.0.0:11434</code></li><li>✅ 重启服务并验证</li><li>✅ 在 Docker 应用中使用 <code>http://宿主机IP:11434</code></li></ol>
<p><strong>配置完成后</strong>,所有 Docker 容器中的应用都可以通过宿主机 IP 访问 Ollama 服务了!</p>
<p class="maodian"><a name="_label10"></a></p><h2>参考资料</h2>
<ul><li><a href="https://github.com/ollama/ollama" rel="external nofollow" target="_blank">Ollama 官方文档</a></li><li><a href="https://docs.docker.com/network/" rel="external nofollow" target="_blank">Docker 网络配置</a></li><li><a href="https://github.com/infiniflow/ragflow" rel="external nofollow" target="_blank">RAGFlow 文档</a></li></ul>
<blockquote><p><strong>文档版本</strong>:v1.0<br /><strong>更新时间</strong>:2025-10-14<br /><strong>适用系统</strong>:Ubuntu 20.04+, Debian 11+, CentOS 8+</p></blockquote>
<p>到此这篇关于Docker容器访问宿主机Ollama服务配置的文章就介绍到这了,更多相关Docker访问宿主机Ollama服务配置内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
頁:
[1]