MongoDB 6单节点副本集Docker Compose配置失败排查
解决MongoDB 6单节点副本集启动失败问题
问题原因
MongoDB 6对单节点副本集的默认行为做了调整,即使未启用加密/TLS,默认的密钥缓存刷新机制会在副本集完成初始化前尝试使用非local读级别,触发NotYetInitialized错误。
修复步骤
1. 显式指定认证机制
在Docker Compose的MongoDB服务配置中,添加启动参数强制使用不需要密钥缓存的SCRAM认证机制:
services: mongodb: image: mongo:6 command: mongod --replSet rs0 --setParameter authenticationMechanisms=SCRAM-SHA-1,SCRAM-SHA-256 ports: - "27017:27017" volumes: - mongodb_data:/data/db
或者通过配置文件(mongod.conf)设置:
setParameter: authenticationMechanisms: "SCRAM-SHA-1,SCRAM-SHA-256"
2. 确保副本集正确初始化
MongoDB 6不再自动完成单节点副本集的初始化,需要手动执行初始化命令:
- 进入运行中的MongoDB容器:
docker exec -it <container-name> mongosh - 执行初始化命令(替换
rs0为你的副本集名称):
如果容器使用自定义网络,需将rs.initiate({ _id: "rs0", members: [{ _id: 0, host: "localhost:27017" }] })host改为容器的服务名(如mongodb:27017)。
3. 禁用不必要的安全特性(可选)
如果完全不需要认证和加密,可以在启动参数中添加--noauth:
command: mongod --replSet rs0 --noauth --setParameter authenticationMechanisms=SCRAM-SHA-1,SCRAM-SHA-256
验证
执行初始化后,等待几秒,执行rs.status()查看副本集状态,当stateStr显示为PRIMARY时,说明启动正常。
内容的提问来源于stack exchange,提问作者Franck Anso
相关产品推荐
相关产品推荐

