我正在使用 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
提前感谢您的帮助