Docker Compose部署Django+ChromaDB连接失败求助
解决Django容器无法连接ChromaDB的问题
核心问题:容器间通信不能使用localhost
在Docker Compose的默认网络环境中,每个容器的localhost指向自身容器,而非宿主机或其他容器。你当前的Django代码中使用localhost:8989尝试连接ChromaDB,实际上是在Django容器内部查找8989端口,自然会出现连接拒绝的错误。
正确的做法是使用Docker Compose中定义的服务名称作为主机地址,你在docker-compose.yml中给ChromaDB定义的服务名是chroma,直接用这个名称即可完成容器间通信。
修改后的Django连接代码
from rest_framework.decorators import api_view from rest_framework.response import Response import chromadb from chromadb.config import Settings # 将host改为服务名"chroma" chroma_client = chromadb.HttpClient( host='chroma', port=8989, settings=Settings(allow_reset=True, anonymized_telemetry=False)) @api_view(['GET']) def index(request): sample_collection = chroma_client.get_or_create_collection(name="sample_collection") print(sample_collection) return Response({ 'info': 'Hello world.' })
额外验证步骤
- 确认ChromaDB服务就绪:执行
docker logs chroma查看容器日志,确认ChromaDB已完成启动并正常监听8989端口。 - 检查Docker网络配置:Docker Compose默认会为所有服务创建共享网络,无需额外配置,服务名可直接解析为对应容器的IP地址,容器间通信无需依赖宿主机的端口映射。
内容的提问来源于stack exchange,提问作者Steve Wins
相关产品推荐
相关产品推荐

