Docker Compose部署双Qdrant服务共享存储启动失败求助
解决Qdrant分布式服务在Mac Docker Compose下启动失败问题
问题原因
你遇到的错误是因为Qdrant的WAL(预写日志)文件需要独占访问,而你给primary和secondary节点挂载了同一个共享存储目录。Mac上Docker的osxfs文件系统在多容器读写同目录时会触发文件锁冲突,导致secondary节点无法打开WAL文件,退出码101就是Qdrant的存储初始化失败错误。
修改配置方案
核心是给每个节点分配独立的存储卷——Qdrant集群通过网络同步数据,不需要共享存储。修改你的docker-compose.yaml如下:
version: '3.8' services: qdrant-primary: image: qdrant/qdrant:latest ports: - "6333:6333" # 对外API端口 - "6334:6334" # 对外管理端口 - "6335:6335" # 集群内部通信端口 volumes: - qdrant-primary-storage:/qdrant/storage # 节点专属存储卷 command: > ./qdrant --storage-path /qdrant/storage --cluster # 启用集群模式 --peer qdrant-secondary:6335 # 指定secondary集群地址 qdrant-secondary: image: qdrant/qdrant:latest ports: - "6336:6333" # 与primary端口错开,避免冲突 - "6337:6334" - "6338:6335" volumes: - qdrant-secondary-storage:/qdrant/storage # 节点专属存储卷 command: > ./qdrant --storage-path /qdrant/storage --cluster --peer qdrant-primary:6335 # 指定primary集群地址 # 定义独立的Docker命名卷 volumes: qdrant-primary-storage: qdrant-secondary-storage:
关键修改点说明
- 独立存储卷:每个节点使用专属的Docker命名卷,彻底规避文件锁冲突,且Mac上Docker命名卷的读写性能比直接挂载本地目录更稳定。
- 端口隔离:secondary节点的对外端口和primary完全错开,防止端口占用冲突。
- 集群配置:通过
--cluster启用集群模式,--peer指定对方节点的内部通信地址(Docker Compose中服务名可直接解析)。
后续操作步骤
- 清理旧的共享存储数据(如果之前挂载过本地目录):
docker-compose down -v # 删除所有服务及关联卷 - 重新启动服务:
docker-compose up -d - 验证集群状态:访问
http://localhost:6333/cluster和http://localhost:6336/cluster,确认两个节点均已成功加入集群。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

