You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Ollama+PDF聊天机器人时出现连接拒绝问题

问题排查与解决方案

核心原因分析

连接拒绝(Errno 111)的本质是聊天机器人应用容器无法正确访问Ollama容器的服务,结合你的部署场景,常见触发点如下:


1. 容器内Ollama访问地址错误

本地环境用localhost:11434能正常访问Ollama,但Docker容器内的localhost指向容器自身,而非Ollama容器。必须改用Docker网络内的服务名(即docker-compose中Ollama的服务名称)作为访问地址。

解决方案:

修改ChatbotManager类中Ollama的初始化代码,将base_url替换为Ollama服务名:

from langchain_community.llms import Ollama

# 假设docker-compose中Ollama服务名为"ollama"
llm = Ollama(model="llama3.2:3B", base_url="http://ollama:11434")

2. Docker网络配置不一致

即使你提到三者桥接到同一网络,仍需确认所有服务都加入同一自定义网络(默认桥接网络可能存在解析问题)。

解决方案:

检查docker-compose.yml,确保三个服务都配置在同一自定义网络下:

version: '3.8'

# 定义自定义网络
networks:
  chatbot-network:
    driver: bridge

services:
  qdrant:
    image: qdrant/qdrant:latest
    networks:
      - chatbot-network
    # 其他配置...

  ollama:
    image: ollama/ollama:latest
    networks:
      - chatbot-network
    volumes:
      - ollama-data:/root/.ollama
    # 无需映射宿主机端口(容器间访问用服务名即可)
    # ports:
    #   - "11434:11434"

  chatbot-app:
    build: .
    networks:
      - chatbot-network
    ports:
      - "8501:8501"
    depends_on:
      - qdrant
      - ollama

3. Ollama服务未完全就绪就被调用

Ollama启动后需要加载Llama3.2模型,这个过程可能需要数分钟,若应用容器先启动并发起请求,会因Ollama服务未就绪导致连接拒绝。

解决方案:

  • 方案1:添加健康检查依赖
    在docker-compose的app服务中增加健康检查,确保Ollama就绪后再启动应用:
chatbot-app:
  # 其他配置...
  healthcheck:
    test: ["CMD", "curl", "-f", "http://ollama:11434/api/tags"]
    interval: 10s
    timeout: 5s
    retries: 5
  depends_on:
    ollama:
      condition: service_healthy
  • 方案2:代码层添加重试逻辑
    在调用Ollama的代码中加入重试机制,避免一次性连接失败:
from tenacity import retry, stop_after_attempt, wait_exponential

@retry(stop=stop_after_attempt(5), wait=wait_exponential(multiplier=1, min=2, max=10))
def get_llm_response(query):
    llm = Ollama(model="llama3.2:3B", base_url="http://ollama:11434")
    return llm.invoke(query)

4. 容器间网络连通性验证

如果上述方案无效,可手动验证应用容器与Ollama容器的连通性:

# 进入应用容器
docker exec -it <你的应用容器名称> sh

# 测试能否ping通Ollama服务名
ping ollama

# 测试Ollama API是否可访问
curl http://ollama:11434/api/tags

如果ping不通或curl失败,说明网络配置存在问题,需重新检查docker-compose的网络定义。


额外提示:Chain.run过时问题

将chain.run(query)替换为chain.invoke({"question": query})(具体参数名需匹配你的Chain定义),避免后续版本兼容性问题。

内容的提问来源于stack exchange,提问作者Karan R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 18:05:10