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

Weaviate容器中text2vec-openai模块证书验证失败问题求助

Weaviate text2vec-openai模块证书验证失败修复方案

问题描述

在operate_weaviate容器(基于python:latest镜像)中执行数据导入代码时,Weaviate内置的text2vec-openai模块返回SSL证书验证错误,无法完成向量生成。

执行代码

import weaviate
import os

# 建立连接
client = weaviate.Client(
    url = "http://xxxxx:8080",
    additional_headers = {
        "X-OpenAI-Api-Key": os.environ.get("OPENAI_APIKEY")
    }
)

# 创建Weaviate类
class_obj = {
    "class": "ManaminaArticle",
    "vectorizer": "text2vec-openai",
    "properties": [
        {
            "dataType": ["text"],
            "name": "sentence",
            "description": "文章句子",
            "moduleConfig": {
                "text2vec-openai": {
                    "vectorizePropertyName": False,
                    "skip": False,
                }
            }
        },
        # 其他属性省略
    ]
}

client.schema.create_class(class_obj)

# 批量上传数据到Weaviate
with client.batch as batch:
    batch.batch_size=100

    for i, data in enumerate(manamina_article):
        sentences = split_sentence(data["contents"], 200)

        for sentence in sentences:
            properties = {
                "title": data["title"],
                "url": 'https://manamina.valuesccg.com/articles/' + data["slug"],
                "sentence": sentence,
            }

            client.batch.add_data_object(properties, "ManaminaArticle")

错误信息

{'error': [{'message': 'update vector: send POST request: Post "https://api.openai.com/v1/embeddings": tls: failed to verify certificate: x509: certificate signed by unknown authority'}]}

环境配置

docker-compose.yml

version: '3.4'
services:
  weaviate:
    command:
    - --host
    - 0.0.0.0
    - --port
    - '8080'
    - --scheme
    - http
    image: semitechnologies/weaviate:1.23.0
    ports:
    - 8080:8080
    - 50051:50051
    volumes:
    - weaviate_data:/var/lib/weaviate
    restart: on-failure:0
    environment:
      OPENAI_APIKEY: ${OPENAI_KEY}
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'text2vec-openai'
      ENABLE_MODULES: 'text2vec-openai,ref2vec-centroid,qna-openai,generative-openai'
      CLUSTER_HOSTNAME: 'node1'
    networks:
      - gpt-nw

  operate_weaviate:
    build: .
    container_name: operate_weaviate
    volumes:
      - ./xxxx:/xxxx
    working_dir: /xxxx
    tty: true
    stdin_open: true
    environment: 
      - CHOKIDAR_USEPOLLING=true
    networks:
      - gpt-nw

volumes:
  weaviate_data:

networks:
  gpt-nw:
    external: true

operate_weaviate容器Dockerfile

FROM python:latest

ENV CI=true
ENV http_proxy ${proxy}
ENV https_proxy ${proxy}

# 安装ping等工具
RUN set -x \
    && apt update -y \
    && apt upgrade -y \
    && apt install -y iputils-ping net-tools \
    && rm -rf /var/lib/apt/lists/*

COPY ./xxxx /xxxx
COPY ./xxxx/requirements.txt .

WORKDIR /xxxx

RUN pip install -r requirements.txt

已尝试的无效操作

  • 在operate_weaviate容器中安装ca-certificates和openssl
  • 在Python代码中设置REQUESTS_CA_BUNDLE环境变量指向OpenAI根证书

注:text2vec-openai模块运行在Weaviate容器内部(基于Go语言实现),而非operate_weaviate的Python环境中,因此针对Python环境的证书配置无效。

修复方法

方法1:挂载信任证书到Weaviate容器(推荐生产环境)

  1. 准备OpenAI API服务器的根证书(或内网代理的CA证书),保存为./certs/OpenAI_Root.crt
  2. 修改docker-compose.yml中weaviate服务的配置:
    • 添加环境变量指定证书路径
    • 挂载证书文件到容器内的信任目录

修改后的weaviate服务配置片段:

services:
  weaviate:
    # 原有command、ports等配置不变
    volumes:
    - weaviate_data:/var/lib/weaviate
    - ./certs/OpenAI_Root.crt:/etc/ssl/certs/OpenAI_Root.crt  # 新增挂载
    environment:
      # 原有环境变量不变
      http_proxy: ${proxy}  # 若使用代理需添加
      https_proxy: ${proxy}  # 若使用代理需添加
      SSL_CERT_FILE: /etc/ssl/certs/OpenAI_Root.crt  # 新增证书路径变量
  1. 重启Weaviate容器:
docker-compose down && docker-compose up -d

方法2:临时禁用SSL证书验证(仅测试环境使用)

在docker-compose.yml的weaviate服务环境变量中添加:

environment:
  # 原有环境变量不变
  OPENAI_INSECURE_SSL: 'true'

该配置会跳过OpenAI API的SSL证书验证,存在安全风险,禁止在生产环境使用。

方法3:自定义Weaviate镜像添加信任证书

如果需要长期信任该证书,可以自定义Weaviate镜像:

  1. 创建自定义Dockerfile:
FROM semitechnologies/weaviate:1.23.0

# 添加CA证书到系统信任存储
COPY ./certs/OpenAI_Root.crt /usr/local/share/ca-certificates/
RUN update-ca-certificates
  1. 修改docker-compose.yml中weaviate的image字段为自定义镜像名称,并添加构建配置:
services:
  weaviate:
    build: ./weaviate-custom  # 指向自定义Dockerfile所在目录
    # 其他配置不变
  1. 重新构建并启动容器:
docker-compose build weaviate && docker-compose up -d

内容的提问来源于stack exchange,提问作者S.Onomura

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 07:03:10