如何将环境变量传递给 mongo docker-entrypoint-initdb.d?

Jav*_*mán 3 database mongoose mongodb docker kubernetes

我正在尝试执行以下教程: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 是自动调用的,所以我无法控制它是如何调用的我不知道我能做些什么来实现我想要的。

预先感谢您并问候。

Laz*_*ima 6

您可以使用 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
Run Code Online (Sandbox Code Playgroud)

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" ]
Run Code Online (Sandbox Code Playgroud)

现在您可以development使用mongodb用户和密码凭据连接到数据库。


Jav*_*mán 0

最后的答案是,您可以在 docker-entrypoint-initdb.d 文件夹中使用 .sh 文件而不是 .js 文件。在sh脚本中,您可以直接使用环境变量。但是,一开始我无法这样做,因为我有一个拼写错误并且环境变量没有正确创建。