使用LangChainJS连接Docker中Weaviate时连接被拒绝求助
问题分析与解决建议
可能原因分析
- 容器启动时序问题:NodeJS服务在Weaviate完全启动就绪前就发起请求,此时Weaviate的8080端口还未开始监听,导致连接被拒绝。
- Weaviate容器未正常启动:环境变量或启动参数配置错误,导致Weaviate服务启动失败,端口未正常开放。
- Docker网络异常:默认网络下容器间的DNS解析或连通性出现异常,导致NodeJS无法访问Weaviate服务。
解决建议
1. 强制容器启动顺序,等待Weaviate就绪
在Docker Compose中为NodeJS服务添加依赖配置与健康检查,确保Weaviate完全启动后再启动NodeJS:
# 假设你的NodeJS服务定义为node-app node-app: # 你的NodeJS镜像、命令等原有配置 depends_on: weaviate: condition: service_healthy weaviate: image: semitechnologies/weaviate:1.21.3 environment: OPENAI_APIKEY: xxx QUERY_DEFAULTS_LIMIT: 25 AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false' PERSISTENCE_DATA_PATH: '/var/lib/weaviate' DEFAULT_VECTORIZER_MODULE: 'text2vec-openai' ENABLE_MODULES: 'text2vec-openai' CLUSTER_HOSTNAME: 'node1' AUTHENTICATION_APIKEY_ENABLED: 'true' AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'xxx' AUTHENTICATION_APIKEY_USERS: 'my_app' ports: - 8080:8080 volumes: - ./docker/weaviate/vectors:/var/lib/weaviate command: - --port - '8080' - --scheme - http healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/v1/.well-known/ready"] interval: 5s timeout: 5s retries: 10
2. 检查Weaviate容器运行状态
执行以下命令排查Weaviate是否正常启动:
# 查看容器状态 docker-compose ps weaviate # 查看容器启动日志,定位启动失败原因 docker-compose logs weaviate
重点关注日志中是否有OpenAI密钥错误、模块加载失败、端口占用等报错信息,对应修正环境变量或配置。
3. 验证容器间网络连通性
进入NodeJS容器,手动测试与Weaviate的连通性:
# 进入NodeJS容器(替换node-app为你的服务名称) docker-compose exec node-app sh # 测试服务名解析 ping weaviate # 测试端口是否可访问 curl http://weaviate:8080/v1/.well-known/ready
如果解析或访问失败,尝试重建Docker Compose网络:
docker-compose down docker-compose up -d
4. 简化配置排查认证问题
临时关闭Weaviate的API密钥认证,简化配置后测试连接:
weaviate: environment: AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true' AUTHENTICATION_APIKEY_ENABLED: 'false' # 保留其他环境变量配置
同时修改客户端代码去掉APIKey配置:
const client = weaviate.client({ scheme: 'http', host: 'weaviate:8080' });
如果此时连接成功,说明原APIKey配置存在密钥不匹配、用户映射错误等问题,需重新核对AUTHENTICATION_APIKEY_ALLOWED_KEYS与AUTHENTICATION_APIKEY_USERS配置。
内容的提问来源于stack exchange,提问作者JSDevGuy
相关产品推荐
相关产品推荐

