如何让Docker化Python应用连接主机Ollama(localhost:11434)?连接报错
问题描述
本地机器已运行搭载llama3.2:latest模型的Ollama,通过ollama ps可确认模型正常运行:
| NAME | ID | SIZE | PROCESSOR | UNTIL |
|---|---|---|---|---|
| llama3.2:latest | a80c4f17acd5 | 4.0 GB | 100% GPU | 3 minutes from now |
Ollama可通过http://localhost:11434/访问。本地运行以下Python脚本(基于pydantic_ai和OpenAIProvider,通过Ollama的OpenAI兼容API连接)正常:
from pydantic import BaseModel from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider class CityLocation(BaseModel): city: str country: str ollama_model = OpenAIModel( model_name='llama3.2', provider=OpenAIProvider(base_url='http://localhost:11434/v1') ) agent = Agent(ollama_model, output_type=CityLocation) result = agent.run_sync('Where were the olympics held in 2012?') print(result.output) print(result.usage())
使用Nixpacks构建Docker镜像:
sudo nixpacks build . -t image1
构建成功后运行容器:
docker run -it b0300949-bf2f-404e-9ea1-ebaa34423b50
运行失败,报错:
openai.APIConnectionError: Connection error
尝试添加--network="host"参数运行,仍出现相同连接错误。
需求:如何让Docker容器成功连接主机上运行在http://localhost:11434/v1的Ollama?
解决方案
1. 修改Ollama监听地址
默认Ollama仅监听localhost(127.0.0.1),仅本机进程可访问,Docker容器即使使用host网络也可能因网络命名空间限制无法访问(尤其在macOS/Windows系统中,Docker的host网络实现与Linux不同)。
- 创建或编辑Ollama配置文件:
~/.ollama/config.json - 添加以下配置:
{ "host": "0.0.0.0:11434" } - 重启Ollama服务:
ollama stop && ollama start
2. 替换代码中的localhost为宿主机实际IP
容器内的localhost指向容器自身,而非宿主机。需修改Python代码中的base_url为宿主机的局域网IP:
- 查看宿主机IP:Linux/macOS用
ip addr或ifconfig,Windows用ipconfig - 修改代码中的
base_url:ollama_model = OpenAIModel( model_name='llama3.2', provider=OpenAIProvider(base_url='http://宿主机IP:11434/v1') ) - 重新构建镜像并运行:
sudo nixpacks build . -t image1 docker run -it image1
3. 先验证容器与宿主机的网络连通性
在容器内先测试能否访问Ollama API:
docker run -it --rm alpine curl http://宿主机IP:11434/v1/models
若返回模型列表,说明网络连通正常,再运行Python脚本容器。
内容的提问来源于stack exchange,提问作者Pierre-olivier Gendraud
相关产品推荐
相关产品推荐

