Настройка набора реплик mongodb локальная, первоначальный пользователь не создан с помощью скрипта docker-compose

Не уверен, что я здесь делаю неправильно, но я не могу запустить аутентификацию ключевого файла, все еще создавая своего первоначального пользователя из моего сценария mongo-init.sh. Как только я добавляю ключевой файл, эта часть работает, но база данных администратора с 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

0 ответов

Другие вопросы по тегам