[英]Create database and user in mongoDB official docker image
我想在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
我所期望的(讀取doc )是創建一個匹配MY_DATABASE_NAME
值的數據庫,並且創建一個匹配MONGO_ROOT_USER
的用戶,並且我可以使用該對( MONGO_ROOT_USER
, MONGO_ROOT_PASSWORD
)進行身份驗證。
好的,我用docker-compose up
啟動我的容器,然后使用docker exec -it <container-id> bash
進入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
旁注:using command: mongod
不必要,基本映像已在使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.