gpt4 book ai didi

mongodb - 在 mongoDB 官方 docker 镜像中创建数据库和用户

转载 作者:可可西里 更新时间:2023-11-01 10:45:59 26 4
gpt4 key购买 nike

我想在 Docker 中运行 MongoDB 服务,以便为 Flask 应用提供服务。我试过的是使用 docker-compose.yml 创建一个容器:

my_mongo_service:
image: mongo
environment:
- MONGO_INITDB_ROOT_USERNAME=${MONGO_ROOT_USER}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_ROOT_PASSWORD}
- MONGO_INITDB_DATABASE=${MY_DATABASE_NAME}
ports:
- "27017:27017"
volumes:
- "/data/db:/data/db"
command: mongod

假设我们有一个 .env像这样的文件:

MONGO_ROOT_USER=my_fancy_username
MONGO_ROOT_PASSWORD=my_fancy_password
MY_DATABASE_NAME=my_fancy_database

我期望的(阅读 the doc )是匹配 MY_DATABASE_NAME 的数据库值被创建并且用户匹配 MONGO_ROOT_USER也被创建,我可以用这对( MONGO_ROOT_USERMONGO_ROOT_PASSWORD )进行身份验证。

好的,我用 docker-compose up 启动我的容器并输入 docker exec -it <container-id> bash .我把mongo在控制台上,当我尝试对其进行身份验证时它崩溃了:

> use my_fancy_database
switched to db my_fancy_database
> db.auth('my_fancy_username','my_fancy_password')
Error: Authentication failed.
0

在日志上,我发现错误如下

[...] authentication failed for my_fancy_username on my_fancy_database from client [...] ; UserNotFound: Could not find user my_fancy_username@my_fancy_database

docker-compose.yml配置(因为它发布在官方文档中)不起作用。我做错了什么?

提前致谢。

最佳答案

我不明白。您是否正在使用不在环境中的环境变量?看起来确实如此。

如果您在终端中执行 echo $MY_DATABASE_NAME 并看到空输出,那么这就是您问题的答案。您首先必须使用 export(或文件的 source)定义变量,或者重新定义您的 docker-compose.yml

为此,最好使用 env_file 指令:

my_mongo_service:
image: mongo
env_file:
- .env
ports:
- "27017:27017"
volumes:
- "/data/db:/data/db"

并将你的 .env 设置为:

MONGO_INITDB_ROOT_USERNAME=my_fancy_username
MONGO_INITDB_ROOT_PASSWORD=my_fancy_password
MONGO_INITDB_DATABASE=my_fancy_database

旁注:使用 command: mongod 不是必需的,基础镜像已经在使用它。

关于mongodb - 在 mongoDB 官方 docker 镜像中创建数据库和用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52352808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com