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

Docker部署Ollama+Python聊天Bot遇域名解析错误的排查求助

问题描述

使用Python 3.10.10开发的本地聊天机器人,计划通过Docker Compose部署到服务器,依赖的Python包如下:

chromadb==0.5.3
streamlit==1.36.0
langchain_core==0.2.9
langchain_community==0.2.5
PyPDF2
pypdf==4.2.0

同时依赖Python 3.10.10、Ollama、Mistral:latest模型和nomic-embed-text:latest嵌入模型。

Dockerfile设置环境变量与启动命令:

ENV BASE_URL=http://ollama:11434
CMD ["streamlit", "run", "chatbot.py", "--server.port=8501", "--server.address=0.0.0.0"]

Docker Compose配置:

version: '3.8'

services:
  ollama:
    image: ollama/ollama:latest  # Use the official Ollama image
    container_name: ollama
    ports:
      - "11434:11434"
    command: >
      ollama pull nomic-embed-text:latest &&
      ollama pull mistral:latest &&
      ollama serve
    # command: serve  # Simplify the command to just serve models available
    environment:
      - MODELS=nomic-embed-text:latest,mistral:latest

  chatbot:
    build: .
    container_name: chatbot
    environment:
      BASE_URL: http://ollama:11434
    ports:
      - "8501:8501"
    depends_on:
      - ollama

执行docker-compose up --build后,访问http://localhost:8501出现错误:

ValueError: Error raised by inference endpoint: HTTPConnectionPool(host='ollama', port=11434): Max retries exceeded with url: /api/embeddings (Caused by NameResolutionError("<urllib3.connection.HTTPConnection object at 0x7f9a613b0d60>: Failed to resolve 'ollama' ([Errno -3] Temporary failure in name resolution)"))

外部访问http://localhost:11434显示Ollama正常运行,本地直接运行聊天机器人代码无问题。

错误原因

  1. 容器启动顺序与服务就绪不同步:depends_on仅保证chatbot容器在ollama容器之后启动,但不等待ollama服务完全就绪。ollama容器启动后会先执行模型拉取操作,该过程耗时较长,此时chatbot已启动并尝试连接ollama,可能遇到DNS解析延迟或服务未就绪的情况。
  2. Docker DNS解析延迟:在ollama容器启动初期,其网络别名(服务名ollama)可能还未完全注册到Docker内置DNS服务,导致chatbot容器无法解析该主机名。

解决方案

方案1:给ollama添加健康检查,确保服务就绪后再启动chatbot

修改Docker Compose配置,为ollama服务添加健康检查,让chatbot仅在ollama服务健康后启动:

version: '3.8'

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    command: >
      ollama pull nomic-embed-text:latest &&
      ollama pull mistral:latest &&
      ollama serve
    environment:
      - MODELS=nomic-embed-text:latest,mistral:latest
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:11434/api/tags"]
      interval: 10s
      timeout: 5s
      retries: 10
      start_period: 30s  # 预留模型拉取的初始化时间

  chatbot:
    build: .
    container_name: chatbot
    environment:
      BASE_URL: http://ollama:11434
    ports:
      - "8501:8501"
    depends_on:
      ollama:
        condition: service_healthy  # 等待ollama服务健康

方案2:在chatbot启动前等待ollama服务可用

在chatbot的Dockerfile中添加等待逻辑,确保ollama服务就绪后再启动streamlit:

修改Dockerfile:

FROM python:3.10.10-slim

# 安装curl用于检测服务状态
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

ENV BASE_URL=http://ollama:11434

# 循环检测ollama服务,可用后启动应用
CMD ["sh", "-c", "until curl -f $BASE_URL/api/tags; do sleep 5; done && streamlit run chatbot.py --server.port=8501 --server.address=0.0.0.0"]

方案3:显式创建Docker网络

显式指定网络可避免潜在的网络隔离问题,确保两个容器在同一网络内:

version: '3.8'

networks:
  chatbot-network:
    driver: bridge

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    command: >
      ollama pull nomic-embed-text:latest &&
      ollama pull mistral:latest &&
      ollama serve
    environment:
      - MODELS=nomic-embed-text:latest,mistral:latest
    networks:
      - chatbot-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:11434/api/tags"]
      interval: 10s
      timeout: 5s
      retries: 10
      start_period: 30s

  chatbot:
    build: .
    container_name: chatbot
    environment:
      BASE_URL: http://ollama:11434
    ports:
      - "8501:8501"
    depends_on:
      ollama:
        condition: service_healthy
    networks:
      - chatbot-network

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:28:15