database - 如何将环境变量传递给 mongo docker-entrypoint-initdb.d?
问题描述
我正在尝试执行以下教程: https ://itnext.io/docker-mongodb-authentication-kubernetes-node-js-75ff995151b6
但是,在那里,他们使用 mongo init.js 文件的原始值,该文件位于 docker-entrypoint-initdb.d 文件夹中。
我想使用来自我的 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
码头工人-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
推荐阅读
- objective-c - 在 Objective-C 的另一个视图中检查 App Delegate 的切换状态
- angular - 当我想明确清除它时无法读取未定义的属性“viewContainerRef”
- mysql - 查询以四舍五入(例如:300.501 到 300.500)
- javascript - 我正在使用 pdf js 库通过 pdf 翻书库来表示 pdf 文件,但搜索在这里不起作用
- c# - 如何在分层模型中引用实例 - 当前上下文中不存在该名称
- javascript - 仅导入您需要的大括号/模式
- multithreading - Mutex 保护是否会因注册推广而失败?
- javascript - 将一组“真”布尔值变量转换为数组
- python - “FloatField”类未定义“__truediv__”
- java - UserAccountControl 属性中不存在 PASSWD_CANT_CHANGE 标志