Weaviate启动失败及容器间通信问题技术求助
解决Docker Compose下Weaviate与t2v-transformers、Panel应用的连接问题
问题分析
从日志可定位两个核心故障:
- Weaviate启动时,t2v-transformers服务尚未就绪,导致连接被拒绝
- Panel应用容器内使用
localhost:8080访问Weaviate,但容器内的localhost指向自身,无法跨容器访问Weaviate服务
解决方案
1. 修正Panel应用的Weaviate连接地址
在Main.ipynb中,所有指向Weaviate的URL需从http://localhost:8080改为http://weaviate:8080。Docker Compose自定义网络中,服务名称可直接作为域名解析到对应容器IP。
2. 配置容器启动依赖与健康检查
修改Docker Compose配置,确保t2v-transformers服务就绪后再启动Weaviate,同时给Weaviate添加健康检查,让Panel应用等待Weaviate完全启动后再尝试连接:
修改后的docker-compose.yml:
version: '3.4' services: weaviate: command: - --host - 0.0.0.0 - --port - '8080' - --scheme - http image: semitechnologies/weaviate:1.19.6 ports: - 8080:8080 restart: on-failure:0 environment: TRANSFORMERS_INFERENCE_API: 'http://t2v-transformers:8080' QUERY_DEFAULTS_LIMIT: 25 AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true' PERSISTENCE_DATA_PATH: '/var/lib/weaviate' DEFAULT_VECTORIZER_MODULE: 'text2vec-transformers' ENABLE_MODULES: 'text2vec-transformers' CLUSTER_HOSTNAME: 'node1' networks: - my-network depends_on: t2v-transformers: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/v1/.well-known/ready"] interval: 5s timeout: 5s retries: 10 t2v-transformers: image: semitechnologies/transformers-inference:sentence-transformers-paraphrase-multilingual-MiniLM-L12-v2 environment: ENABLE_CUDA: '0' networks: - my-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/.well-known/ready"] interval: 5s timeout: 5s retries: 10 buscahibrida: build: . container_name: buscahibrida-container command: panel serve ./Main.ipynb --address 0.0.0.0 --port 5006 ports: - 5006:5006 volumes: - .:/buscahibrida networks: - my-network depends_on: weaviate: condition: service_healthy networks: my-network:
3. 优化Panel应用运行(可选)
日志中提到的内存泄漏警告源于直接运行Jupyter Notebook文件。建议将Main.ipynb导出为Python脚本(Main.py),修改启动命令为:
panel serve ./Main.py --address 0.0.0.0 --port 5006
可避免Notebook运行时的潜在内存问题。
关键修改说明
- 健康检查:给t2v-transformers和Weaviate添加
healthcheck,确保服务真正就绪后才允许依赖服务启动 - 启动依赖:通过
depends_on的service_healthy条件,替代默认的容器启动完成判断,解决服务启动顺序问题 - 网络访问:容器间通过服务名而非
localhost访问,利用Docker内置DNS解析
内容的提问来源于stack exchange,提问作者Geraldo Francisco
相关产品推荐
相关产品推荐

