无法通过MongoDB Compass连接Docker部署的MongoDB副本集求助
MongoDB副本集Docker部署问题解决步骤
一、修复keyFile权限问题
MongoDB的keyFile要求权限必须为600(仅所有者可读可写),否则节点间无法通过密钥认证,导致副本集无法建立。
- 本地修改keyFile权限:
chmod 600 ./keyFile.txt - 重启容器同步权限:
docker-compose down && docker-compose up -d
二、手动初始化副本集
容器启动后副本集不会自动初始化,需手动执行初始化操作:
- 进入mongo1容器的Mongo Shell:
docker exec -it mongo1 mongosh -u user -p user123 --authenticationDatabase admin - 在Shell中执行初始化命令:
rs.initiate({ _id: "myReplicaSet", members: [ { _id: 0, host: "mongo1:27017" }, { _id: 1, host: "mongo2:27017" }, { _id: 2, host: "mongo3:27017" } ] }) - 执行
rs.status()查看副本集状态,确认所有节点正常加入。
三、修正MongoDB Compass连接字符串
副本集需使用包含所有节点的连接字符串,指定副本集名称与认证信息,格式如下:
mongodb://user:user123@localhost:27017,localhost:27018,localhost:27019/?authSource=admin&replicaSet=myReplicaSet
注意:Compass需切换为副本集连接模式,而非单节点模式。
四、可选:添加自动初始化脚本(避免手动操作)
若希望容器启动时自动初始化副本集,可添加初始化脚本:
- 在docker-compose.yml同目录下创建
init-replica.js文件:rs.initiate({ _id: "myReplicaSet", members: [ { _id: 0, host: "mongo1:27017" }, { _id: 1, host: "mongo2:27017" }, { _id: 2, host: "mongo3:27017" } ] }) - 修改docker-compose.yml中mongo1的volumes配置,挂载脚本:
volumes: - ./keyFile.txt:/opt/keyFile.txt - ./init-replica.js:/docker-entrypoint-initdb.d/init-replica.js - 重启容器,脚本会在首次启动时自动执行初始化。
内容的提问来源于stack exchange,提问作者Charisman Apriandi
相关产品推荐
相关产品推荐

