微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mongodb 副本集设置本地,初始用户不是使用 docker-compose 脚本创建的

如何解决mongodb 副本集设置本地,初始用户不是使用 docker-compose 脚本创建的

不确定我在这里做错了什么,但是我仍然无法在通过 mongo-init.sh 脚本创建初始用户的同时进行密钥文件身份验证。一旦我添加了 keyfile 选项,那部分就可以工作,但不会创建带有 appUser 的管理数据库。我一定错过了一些微妙的东西,因为有那么一刻,这一切都奏效了!也许这是在数据库已经处于再次执行时可以使事情正常工作的状态后再次尝试脚本的结果......谢谢!

我的密钥文件是这样生成的:

openssl rand -base64 700 > keyfile
chmod 400 keyfile

我的 docker-compose.yml 文件

mongo:
  image: mongo:4.4.3
  container_name: mongo
  hostname: mongodb
  restart: unless-stopped
  environment:
    MONGO_INITDB_ROOT_USERNAME: root
    MONGO_INITDB_ROOT_PASSWORD: rootPassword
    MONGO_REPLICA_SET_NAME: rs0
  command: 'bash -c "chown 999:999 /data/keyfile; mongod --keyFile /data/keyfile --replSet rs0 --journal --bind_ip_all --port 27017 --auth"'
  ports:
    - '27017:27017'
  volumes:
    - ./data/mongodb/data/log/:/var/log/mongodb/
    - ./data/mongodb:/data/db
    - ./data/mongodb/home:/home/mongodb/
    - ./configs/mongodb/keyfile:/data/keyfile:ro
    - ./configs/mongodb/mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh:ro

mongo-init.sh 文件

#!/bin/bash

mongo -- "appDB" <<EOF
    var cfg = {
        "_id": "rs0","version": 1,"members": [
            {
                "_id": 0,"host": "mongodb:27017","priority": 0
            },]
    };
    rs.initiate(cfg,{ force: true });
    // rs.reconfig(cfg,{ force: true });
    // rs.status();
EOF
sleep 10
mongo -- "appDB" <<EOF
   use admin;
   var admin = db.getSiblingDB("admin");
   admin.auth("root","rootPassword");

    db.createuser({
       user: "appUser",pwd: "appPassword",roles: [{
           role: "readWrite",db: "appDB"
        }]
    });
   
    // rs.status();
EOF

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。