我正在尝试执行以下教程:
https://itnext.io/docker-mongodb-authentication-kubernetes-node-js-75ff995151b6
但是,在那里,它们使用位于 docker-entrypoint-initdb.d 文件夹中的 mongo init.js 文件的原始值。
我想使用来自我的 CI/CD 系统 (Gitlab) 的环境变量。有谁知道如何将环境变量传递给 init.js 文件?我尝试了几种方法,例如使用 init.sh 代替 shell,但没有任何成功。
如果我手动运行 init shell 版本,我可以让它工作,因为我使用 --eval 调用 mongo 并传递值,但是,自动调用 docker-entrypoint-blabla,所以我无法控制它的调用方式我不知道我能做些什么来实现我想要的。
预先感谢您并问候。
最佳答案
您可以使用 shell 脚本来检索环境变量并创建用户。
initdb.d/init-mongo.sh
set -e
mongo <<EOF
use $MONGO_INITDB_DATABASE
db.createUser({
user: '$MONGO_INITDB_USER',
pwd: '$MONGO_INITDB_PWD',
roles: [{
role: 'readWrite',
db: '$MONGO_INITDB_DATABASE'
}]
})
EOF
docker-compose.yml version: "3.7"
services:
mongodb:
container_name: "mongodb"
image: mongo:4.4
hostname: mongodb
restart: always
volumes:
- ./data/mongodb/mongod.conf:/etc/mongod.conf
- ./data/mongodb/initdb.d/:/docker-entrypoint-initdb.d/
- ./data/mongodb/data/db/:/data/db/
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=root
- MONGO_INITDB_DATABASE=development
- MONGO_INITDB_USER=mongodb
- MONGO_INITDB_PWD=mongodb
ports:
- 27017:27017
command: [ "-f", "/etc/mongod.conf" ]
现在您可以连接到 development
数据库使用 mongodb
作为用户和密码凭据。
关于database - 如何将环境变量传递给 mongo docker-entrypoint-initdb.d?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64606674/