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容器(推荐生产环境)
- 准备OpenAI API服务器的根证书(或内网代理的CA证书),保存为
./certs/OpenAI_Root.crt - 修改
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 # 新增证书路径变量
- 重启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镜像:
- 创建自定义Dockerfile:
FROM semitechnologies/weaviate:1.23.0 # 添加CA证书到系统信任存储 COPY ./certs/OpenAI_Root.crt /usr/local/share/ca-certificates/ RUN update-ca-certificates
- 修改
docker-compose.yml中weaviate的image字段为自定义镜像名称,并添加构建配置:
services: weaviate: build: ./weaviate-custom # 指向自定义Dockerfile所在目录 # 其他配置不变
- 重新构建并启动容器:
docker-compose build weaviate && docker-compose up -d
内容的提问来源于stack exchange,提问作者S.Onomura
相关产品推荐
相关产品推荐

