簡體   English   中英

在mongoDB官方docker映像中創建數據庫和用戶

[英]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_USERMONGO_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM