如何在Docker中重启Weaviate且不会丢失已创建的Schema?
问题根因
Weaviate 默认将 Schema、向量索引、原始数据全部存储在容器内部的 /var/lib/weaviate 路径下。Docker 容器的文件系统默认是临时的,只要容器停止销毁、重启,没有持久化挂载的目录内的所有数据都会被清空,这是重启后 Schema 丢失的核心原因,和 Weaviate 本身的运行逻辑无关。
修复&永久避免数据丢失的操作步骤
- 第一步:先停止当前运行的 Weaviate 容器
执行命令:docker stop <你的Weaviate容器ID/容器名> - 第二步:在宿主机创建一个专门用于存储 Weaviate 数据的目录,比如:
执行命令:mkdir -p /opt/weaviate/data
你也可以自定义其他路径,确保当前操作用户有该目录的读写权限即可 - 第三步:修改 Weaviate 启动配置,添加持久化卷挂载
如果你是用docker run直接启动的,在原启动命令中添加-v /opt/weaviate/data:/var/lib/weaviate参数,示例命令如下:
如果你是用docker run -d -p 8080:8080 -p 50051:50051 \ -v /opt/weaviate/data:/var/lib/weaviate \ semitechnologies/weaviate:latestdocker-compose启动的,在weaviate服务的配置下添加volumes配置段,示例:services: weaviate: image: semitechnologies/weaviate:latest ports: - "8080:8080" - "50051:50051" volumes: - /opt/weaviate/data:/var/lib/weaviate environment: - QUERY_DEFAULTS_LIMIT=25 - AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true - PERSISTENCE_DATA_PATH=/var/lib/weaviate # 其他原有环境变量、Q&A模块配置保持不变 - 第四步:重新启动 Weaviate 容器即可,后续无论重启容器、甚至删除容器重建,只要宿主机的
/opt/weaviate/data目录不删除,Schema 和所有数据都不会丢失
注意事项
- 如果你当前有需要保留的存量 Schema 和数据,先不要删除旧容器,先执行
docker cp <容器ID>:/var/lib/weaviate /opt/weaviate/data把原有数据拷贝到宿主机,再按上面的步骤挂载启动,即可恢复原有数据 - 确保
PERSISTENCE_DATA_PATH环境变量的取值和你挂载到容器内的路径一致,默认就是/var/lib/weaviate,无需额外修改
内容的提问来源于stack exchange,提问作者Hars
相关产品推荐
相关产品推荐

