不知道我在这里做错了什么,但是在仍然从我的 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