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

跨设备部署Weaviate应用时Schema与数据丢失问题求助

Weaviate数据跨机器丢失的解决办法

问题描述

我开发一款本地使用Weaviate的应用,已编写docker-compose.yml并通过docker-compose up启动Weaviate数据库。创建Schema并导入数据后应用运行正常,但将代码克隆到另一台电脑后,应用崩溃,数据库的Schema及所有数据均丢失。我是Docker与Weaviate新手,寻求解决方法。

最初的docker-compose.yml配置

---
version: '3.4'
services:
  weaviate:
    command:
    - --host
    - 0.0.0.0
    - --port
    - '8080'
    - --scheme
    - http
    image: semitechnologies/weaviate:1.18.0
    volumes:
      - /var/weaviate:/var/lib/weaviate
    ports:
    - 8080:8080
    restart: on-failure:0
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'none'
      ENABLE_MODULES: ''
      CLUSTER_HOSTNAME: 'node1'

调整后的卷配置(问题仍存在)

---
version: '3.4'
services:
  weaviate:
    command:
    - --host
    - 0.0.0.0
    - --port
    - '8080'
    - --scheme
    - http
    image: semitechnologies/weaviate:1.18.0
    volumes:
      - weaviate-data:/data
    ports:
    - 8080:8080
    restart: on-failure:0
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'none'
      ENABLE_MODULES: ''
      CLUSTER_HOSTNAME: 'node1'
volumes:
  weaviate-data:

解决步骤

1. 修正数据路径不匹配问题

你的环境变量PERSISTENCE_DATA_PATH指定Weaviate存储数据的路径是/var/lib/weaviate,但调整后的卷挂载到了/data,导致Weaviate写入的数据根本没落到你挂载的卷里,换电脑自然丢失数据。

修正方案:卷挂载路径必须和PERSISTENCE_DATA_PATH保持一致,以下是两种可行配置:

方案A:使用Docker命名卷(推荐,适合单机器持久化)

---
version: '3.4'
services:
  weaviate:
    command:
    - --host
    - 0.0.0.0
    - --port
    - '8080'
    - --scheme
    - http
    image: semitechnologies/weaviate:1.18.0
    volumes:
      - weaviate-data:/var/lib/weaviate  # 与PERSISTENCE_DATA_PATH路径一致
    ports:
    - 8080:8080
    restart: on-failure:0
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'none'
      ENABLE_MODULES: ''
      CLUSTER_HOSTNAME: 'node1'
volumes:
  weaviate-data:

方案B:使用绑定挂载(适合跨机器同步)

将数据存储到代码目录下的weaviate-data文件夹,方便随代码一起克隆或传输:

---
version: '3.4'
services:
  weaviate:
    command:
    - --host
    - 0.0.0.0
    - --port
    - '8080'
    - --scheme
    - http
    image: semitechnologies/weaviate:1.18.0
    volumes:
      - ./weaviate-data:/var/lib/weaviate  # 宿主机本地目录挂载到容器存储路径
    ports:
    - 8080:8080
    restart: on-failure:0
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'none'
      ENABLE_MODULES: ''
      CLUSTER_HOSTNAME: 'node1'

2. 跨机器迁移数据

如果用命名卷,Docker的命名卷是本地主机专属的,新电脑没有旧电脑卷里的数据,需要手动迁移:

步骤1:在旧电脑导出数据

执行以下命令把命名卷里的数据复制到本地backup目录:

docker run --rm -v weaviate-data:/var/lib/weaviate -v $(pwd)/backup:/backup busybox cp -r /var/lib/weaviate /backup

步骤2:在新电脑导入数据

把backup目录复制到新电脑的代码目录下,执行命令把数据导入新电脑的命名卷:

docker run --rm -v weaviate-data:/var/lib/weaviate -v $(pwd)/backup:/backup busybox cp -r /backup/weaviate /var/lib/weaviate

步骤3:启动Weaviate

导入完成后,运行docker-compose up -d启动服务,数据和Schema就会恢复。

如果用绑定挂载,直接把weaviate-data文件夹和代码一起克隆到新电脑,启动服务即可自动加载数据。

3. 验证配置

启动后可以通过Weaviate的API查询Schema或数据,确认是否正常加载:

curl http://localhost:8080/v1/schema

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:23:27