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

无法通过MongoDB Compass连接Docker部署的MongoDB副本集求助

MongoDB副本集Docker部署问题解决步骤

一、修复keyFile权限问题

MongoDB的keyFile要求权限必须为600(仅所有者可读可写),否则节点间无法通过密钥认证,导致副本集无法建立。

  • 本地修改keyFile权限:
    chmod 600 ./keyFile.txt
    
  • 重启容器同步权限:
    docker-compose down && docker-compose up -d
    

二、手动初始化副本集

容器启动后副本集不会自动初始化,需手动执行初始化操作:

  1. 进入mongo1容器的Mongo Shell:
    docker exec -it mongo1 mongosh -u user -p user123 --authenticationDatabase admin
    
  2. 在Shell中执行初始化命令:
    rs.initiate({
      _id: "myReplicaSet",
      members: [
        { _id: 0, host: "mongo1:27017" },
        { _id: 1, host: "mongo2:27017" },
        { _id: 2, host: "mongo3:27017" }
      ]
    })
    
  3. 执行rs.status()查看副本集状态,确认所有节点正常加入。

三、修正MongoDB Compass连接字符串

副本集需使用包含所有节点的连接字符串,指定副本集名称与认证信息,格式如下:

mongodb://user:user123@localhost:27017,localhost:27018,localhost:27019/?authSource=admin&replicaSet=myReplicaSet

注意:Compass需切换为副本集连接模式,而非单节点模式。

四、可选:添加自动初始化脚本(避免手动操作)

若希望容器启动时自动初始化副本集,可添加初始化脚本:

  1. 在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" }
      ]
    })
    
  2. 修改docker-compose.yml中mongo1的volumes配置,挂载脚本:
    volumes:
      - ./keyFile.txt:/opt/keyFile.txt
      - ./init-replica.js:/docker-entrypoint-initdb.d/init-replica.js
    
  3. 重启容器,脚本会在首次启动时自动执行初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:07:35