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

使用Docker Compose+HTTPS部署Qdrant时遇证书验证失败问题

问题分析与解决方案

核心原因

searchai容器无法验证Qdrant的SSL证书,是因为容器内没有安装mkcert生成的本地根证书。主机能正常连接是因为mkcert自动把根证书添加到了主机的信任存储中,但容器是独立环境,默认不包含该根证书。

解决方案

1. 定位mkcert根证书路径

在主机上执行命令获取根证书所在目录:

mkcert -CAROOT

默认输出为~/.local/share/mkcert/,目录下的rootCA.pem就是需要的根证书文件。

2. 修改Docker Compose,挂载根证书到searchai容器

假设你的searchai服务在docker-compose中定义为searchai,添加volume挂载根证书,并更新容器的证书信任存储:

services:
  # 保留原有qdrant配置不变
  qdrant:
    ...
  searchai:
    # 原有配置(镜像、端口等)不变
    image: your-searchai-image
    ports:
      - "8000:8000"
    # 添加根证书挂载
    volumes:
      - ~/.local/share/mkcert/rootCA.pem:/usr/local/share/ca-certificates/mkcert-rootCA.crt
    # 启动时更新证书信任(针对Debian/Ubuntu系镜像)
    command: sh -c "update-ca-certificates && python manage.py runserver 0.0.0.0:8000"

若searchai使用Alpine镜像,启动命令改为:

sh -c "cp /usr/local/share/ca-certificates/mkcert-rootCA.crt /etc/ssl/certs/ && update-ca-certificates && python manage.py runserver 0.0.0.0:8000"

3. 代码层面指定CA证书(无需系统级信任)

如果不想修改容器的系统信任存储,可直接在QdrantClient初始化时指定根证书路径:

qdrant_client = QdrantClient(
    url=kwargs.get("url", "https://qdrant"),
    port=kwargs.get("port", 6333),
    api_key=kwargs.get("apikey"),
    timeout=kwargs.get("timeout", 1000),
    # 指定挂载到容器内的根证书路径
    ssl_ca_cert="/usr/local/share/ca-certificates/mkcert-rootCA.crt"
)

4. 验证证书SAN包含容器名(可选)

确认生成的证书包含qdrant主机名,执行命令检查:

openssl x509 -in ./qdrant_data/tls/qdrant_3.pem -text -noout | grep -A 1 "Subject Alternative Name"

输出需包含DNS:qdrant,若缺失则重新生成证书:

mkcert qdrant localhost 127.0.0.1 ::1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:25:09