Docker中有两个container,一个django,一个chroma向量数据库,从Django中连接chroma报错,下面是docker-compose.yml文件:
version: '3.9'services: django: container_name: django build: context: ./app command: python manage.py runserver 0.0.0.0:8000 volumes: - ./app:/Users/apple/Docker/app/ ports: - '8000:8000' expose: - 8000 chroma: container_name: chroma image: ghcr.io/chroma-core/chroma:latest volumes: - index_data:/Users/apple/Docker/app/data ports: - '8989:8989' expose: - 8989volumes: index_data: name: my-db-data
下面是Dockerfile文件
FROM python:3.9WORKDIR /Users/apple/Docker/appENV PYTHONDONTWRITEBYTECODE 1ENV PYTHONUNBUFFERED 1RUN pip install --upgrade pipCOPY ./requirements.txt /Users/apple/Docker/app/requirements.txtRUN pip3 install -r requirements.txtCOPY ./entrypoint.sh /Users/apple/Docker/app/entrypoint.shCOPY . /Users/apple/Docker/app/EXPOSE 8000ENTRYPOINT ["/Users/apple/Docker/app/entrypoint.sh"]
从Django中连接chroma向量数据看,代码如下:
from rest_framework.decorators import api_viewfrom rest_framework.response import Responseimport chromadbfrom chromadb.config import Settingschroma_client = chromadb.HttpClient( host='localhost', 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.' })
报错如下:
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=8989): Max retries exceeded with url: /api/v1/collections (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f35e0e3c4f0>: Failed to establish a new connection: [Errno 111] Connection refused'))
Docker的容器运行情况:
CONTAINER ID PORTS. NAMES 2710918946b0 0.0.0.0:8000->8000/tcp django 18ee5e4e3a7d 8000/tcp, 0.0.0.0:8989->8989/tcp chroma
请各位大佬帮忙看看,谢谢。
chroma_client = chromadb.HttpClient( host='localhost', port=8989, settings=Settings(allow_reset=True, anonymized_telemetry=False))
这里写的localhost
,你可能需要把这里改成 chroma
,django这个容器里面访问localhost,只能访问到django容器的localhost,它是属于一个独立的网络命名空间(既不属于chroma也不属于宿主机)。
从你的问题描述中,这个问题看起来是因为你的Django应用无法连接到Chroma数据库。具体的错误是Max retries exceeded
,这通常是因为连接被拒绝,尝试建立连接的次数超过了最大限制。
这可能有几个原因:
networks:
部分来定义网络,并使用--network
选项来为你的容器指定网络。你可以尝试以下步骤来解决你的问题:
docker logs <chroma-container-id>
,查看Chroma服务的日志,看是否有错误信息或者服务是否已经启动。netstat -tuln | grep 8989
看是否有其他服务占用了8989端口。localhost
更改为127.0.0.1
或0.0.0.0
。networks: default: driver: bridge
然后使用--network=networks.default
选项来为你的容器指定网络。
希望这些建议能帮助你解决问题。
如何修复此错误? Traceback(最近一次调用):文件"C:/用户/HP/下载/cv_api/cv_api/manage.py",第10行,execute_from_command_line(sys.argv) 文件“F:\ anaconda 2 installation \ lib \ site-packages \ django-1 . 10 . 5-py 2.7 . egg \ djan
我有这个django网站翻译从英语到德语从locale/lc_messages/django.po和django.mo文件。但是,当我试着翻译用德语字母写的单词时,它给了我一个错误
问题内容: 我遇到了有关monkey修补Django的帖子: 我知道这不是理想的选择,最好User通过单独的模型添加字段和函数Profile。 话虽如此,我只想了解这是如何工作的: 我将把monkey补丁代码放在哪里? 代码何时运行-仅运行一次?每个Python解释器启动一次?每个请求一次? 大概我仍然需要更改数据库架构。因此,如果我放下桌子运行,会syncdb“知道”是否已添加新字段吗?如果没有
E立方管理平台表单填报时超链接不能使用,点击这些超链接出现“由于本机的限制,该操作已被取消,请与系统管理员联系”的提示,可用以下方法解决: 一、Office 2003 解决方法:IE - 工具 - Internet选项,点“程序”,在“默认的WEB浏览器”中点“设为默认值”,就可以解决这个问题,在EXCEL中点链接不再提示“由于本机的限制,该操作已被取消,请与系统管理员联系”这个信息了
我现在的Jenkins运行多个构建。每个构建/运行都将创建自己的testng-results.xml(target/surefire-reports/testng-results.xml) 我检查了Jenkins job主页上的HTML报告的结果(该报告只显示最新构建/运行的报告)。 不管怎样,为了得到这个?
我们确实发现了一篇文章指出了java 11中TLS1.3的一个问题(https://webtide.com/openjdk-11-and-tls-1-3-issues/),但是我们已经尝试了java 12版本,但没有成功,所以我认为这不是问题所在。 因此,我们现在必须决定是通过强制使用TLS1.2来回归,还是继续寻找另一种解决方案。