【发布时间】:2020-08-16 14:08:31
【问题描述】:
假设我们在烧瓶 + MongoDB 应用程序中使用 docker 和 docker-compose,我们需要在烧瓶应用程序中与数据库进行交互。用于与数据库交互的 DB 用户的用户名和密码应在环境变量中定义,因为这是存储此类数据的最安全方式。我们可以使用三个不同的环境变量,如 mongo docker 镜像 docs 所示,其中两个变量对我们来说很有趣,MONGO_INITDB_ROOT_USERNAME 和 MONGO_INITDB_ROOT_PASSWORD。我们可以以这种方式定义 root 用户并在我们的烧瓶应用程序中使用它,但这不是最佳安全实践。现在,如文档中所述,我们可以使用docker-entrypoint-initdb.d/somefile.js 定义另一个用户,但问题是,我没有找到在 js 文件中使用环境变量的方法,这意味着如果我定义了变量,比方说, MONGO_USER 和 MONGO_PASS 在 docker-compose.yml environemnt 部分内,我将无法使用它们来创建数据库非 root 用户。
如果我可以在 js 文件中使用环境变量,该文件将类似于下面的文件。
db.createUser(
{
user: $MONGO_USER,
pwd: $MONGO_PASS,
roles: [
{
role: "readWrite",
db: "my_database"
}
]
}
);
显然,不幸的是,我不能像这样在 js 文件中使用环境变量。
我的问题是.. 在使用 docker-compse 和 docker mongo image 时,如何使用环境变量创建 非 root 用户?访问 MongoDB 数据库是否有更好的做法?在启动容器时,我是否应该根本不以编程方式创建数据库用户?容器启动后,我是否可以使用 root 帐户手动创建用户?
【问题讨论】:
标签: mongodb docker docker-compose environment-variables