Docker容器访问宿主机Ollama服务配置详细操作步骤

 更新时间:2025年12月05日 11:16:27   作者:临街的小孩  
Ollama现在已经支持Docker安装,极大的简化了服务器用户部署难度,这篇文章主要介绍了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/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'
[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"; 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

使用方法

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 服务了!

参考资料

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

到此这篇关于Docker容器访问宿主机Ollama服务配置的文章就介绍到这了,更多相关Docker访问宿主机Ollama服务配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker实现MySQL数据同步的方法

    docker实现MySQL数据同步的方法

    docker的一大好处是在本地可以很方便快速的搭建负载均衡,主从同步等需要多主机的环境,本文主要介绍了docker实现MySQL数据同步的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • excel导出在docker环境中总是失败的问题

    excel导出在docker环境中总是失败的问题

    这篇文章主要介绍了excel导出在docker环境中总是失败的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,
    2020-09-09
  • Docker 部署 MongoDB容器的方法

    Docker 部署 MongoDB容器的方法

    Docker就可以帮助我们将开发的应用程序,以及该程序的依赖包都打包在一个文件里,下面通过本文给大家分享Docker 部署 MongoDB的详细教程,感兴趣的朋友一起看看吧
    2021-06-06
  • 使用docker部署dubbo项目的方法步骤

    使用docker部署dubbo项目的方法步骤

    这篇文章主要介绍了使用docker部署dubbo项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • docker 编辑Dockerfile 添加php7.2 acpu的问题

    docker 编辑Dockerfile 添加php7.2 acpu的问题

    这篇文章主要介绍了docker 编辑Dockerfile 添加php7.2 acpu问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • docker容器内部可以访问,外部无法访问的处理

    docker容器内部可以访问,外部无法访问的处理

    这篇文章主要介绍了docker容器内部可以访问,外部无法访问的处理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Linux系统docker部署.net core3.1的详细步骤

    Linux系统docker部署.net core3.1的详细步骤

    这篇文章主要介绍了Linux系统docker部署.net core3.1,文章演示基本的基于docker部署.netcore服务,linux系统腾讯云ubuntu,.net core版本3.1,需要的朋友可以参考下
    2022-09-09
  • 如何解决Docker连接本地MySQL服务失败的问题

    如何解决Docker连接本地MySQL服务失败的问题

    这篇文章主要介绍了如何解决Docker连接本地MySQL服务失败的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • docker环境下安装jenkins容器的详细教程

    docker环境下安装jenkins容器的详细教程

    这篇文章主要介绍了docker环境下安装jenkins容器的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Docker跨服务器通信Overlay解决方案(上)之 Consul单实例

    Docker跨服务器通信Overlay解决方案(上)之 Consul单实例

    这篇文章主要介绍了Docker跨服务器通信Overlay解决方案(上)之 Consul单实例,本文通过场景分析实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12

最新评论