Docker Compose 为多个 Mongodb 数据库(副本集)创建用户身份验证

时间:2021-06-17 07:46:57

标签: mongodb docker-compose

我正在使用 docker compose 来启动 3 Node mongodb 副本集。我正在尝试为所有数据库创建用户身份验证。我的问题是休闲脚本不起作用。 .docker/initdb.d/ 文件夹中的 usercreate.sh 文件。

我尝试了以下但没有机会

usercreate.sh

#!/bin/bash
    set -e
    
    echo ">>>>>>> trying to create database and users"
    
    mongo -u $MONGO_INITDB_ROOT_USERNAME -p $MONGO_INITDB_ROOT_PASSWORD<<EOF
        db=db.getSiblingDB('balloon');
        db=db.getSiblingDB('reservation');
        db=db.getSiblingDB('accounting');
        use balloon;
        db.createUser({
            user: '$MONGO_INITDB_USERNAME',
            pwd: '$MONGO_INITDB_PASSWORD',
            roles: [ { role: 'readWrite', db: 'balloon' } ]
        });
        use reservation;
        db.createUser({
            user: '$MONGO_INITDB_USERNAME',
            pwd: '$MONGO_INITDB_PASSWORD',
            roles: [ { role: 'readWrite', db: 'reservation' } ]
        });
        use accounting;
        db.createUser({
            user: '$MONGO_INITDB_USERNAME',
            pwd: '$MONGO_INITDB_PASSWORD',
            roles: [ { role: 'readWrite', db: 'accounting' } ]
        });
    EOF

docker-compose.yml 文件;

version: "3.9"

    services:
      mongo-replica-setup:
        container_name: mongo-setup
        image: mongo
        restart: on-failure
        networks:
          - backend
        volumes:
          - ./.docker/scripts/mongosetup.sh:/scripts/mongosetup.sh
        entrypoint: ["bash", "/scripts/mongosetup.sh"]
        env_file:
          - .env
        environment:
          MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
          MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
        depends_on:
          - mongo1
          - mongo2
          - mongo3
      mongo1:
        hostname: "mongo1"
        container_name: "mongo1"
        image: mongo
        restart: "on-failure"
        command: ["-f", "/etc/mongod.conf", "--keyFile", "/auth/key.txt", "--replSet", "${MONGO_REPLICA_SET_NAME}", "--bind_ip_all"]
        expose:
          - 27017
        ports:
          - 27017:27017
        networks:
          - backend
        volumes:
          - ./data1:/data/db
          - ./.docker/initdb.d/:/docker-entrypoint-initdb.d/
          - ./.docker/mongod.conf:/etc/mongod.conf
          - ./.docker/key.txt:/auth/key.txt
        healthcheck:
          test: test $$(echo "rs.status().ok" | mongo -u $${MONGO_INITDB_ROOT_USERNAME} -p $${MONGO_INITDB_ROOT_PASSWORD} --quiet) -eq 1
          interval: 30s
          start_period: 60s
        env_file:
          - .env
        environment:
          MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
          MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
          MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
      mongo2:
        hostname: "mongo2"
        container_name: "mongo2"
        image: mongo
        command: ["-f", "/etc/mongod.conf", "--keyFile", "/auth/key.txt", "--replSet", "${MONGO_REPLICA_SET_NAME}", "--bind_ip_all"]
        restart: "on-failure"
        expose:
          - 27017
        ports:
          - 27027:27017
        networks:
          - backend
        volumes:
          - ./data2:/data/db
          - ./.docker/mongod.conf:/etc/mongod.conf
          - ./.docker/key.txt:/auth/key.txt
        env_file:
          - .env
        environment:
          MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
          MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
          MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
        depends_on:
          - mongo1
      mongo3:
        hostname: "mongo3"
        container_name: "mongo3"
        image: mongo
        command: ["-f", "/etc/mongod.conf", "--keyFile", "/auth/key.txt", "--replSet", "${MONGO_REPLICA_SET_NAME}", "--bind_ip_all"]
        restart: "on-failure"
        expose:
          - 27017
        ports:
          - 27037:27017
        networks:
          - backend
        volumes:
          - ./data3:/data/db
          - ./.docker/mongod.conf:/etc/mongod.conf
          - ./.docker/key.txt:/auth/key.txt
        env_file:
          - .env
        environment:
          MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
          MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
          MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
        depends_on:
          - mongo1
    volumes:
      data1:
      data2:
      data3:
    networks:
      backend:
        name: backend
        driver: bridge

提前感谢您的帮助

0 个答案:

没有答案