簡體   English   中英

使用 docker-entrypoint-initdb.d 創建的 Mongodb 用戶不會保留在數據庫中

[英]Mongodb user created with docker-entrypoint-initdb.d doesn't persist in the database

我一直在嘗試為我的數據庫創建一個用戶(不是管理員),但我無法讓它保留在數據庫中。

我正在使用來自docker-entrypoint-initdb.d入口點的sh初始化腳本。 當我運行docker-compose up一切似乎都在工作。 但是當我嘗試連接並搜索用戶時,它不會出現。

日志顯示:

UserNotFound: Could not find user \"john\" for db \"datadb\"

我的項目結構非常簡單:

在此處輸入圖像描述

docker-compose.yml

version: '3.3'
services:
  mongodb:
    image: mongo:latest
    container_name: mongo_db
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: rootpass
      MONGO_INITDB_DATABASE: datadb
    volumes:
      - ./init.d/:/docker-entrypoint-initdb.d/
      - mongodbdata:/data/db
    restart: always
volumes:
  mongodbdata:
    driver: local

初始化mongo.sh

#!/bin/bash
set -eu
mongo -u $MONGO_INITDB_ROOT_USERNAME -p $MONGO_INITDB_ROOT_PASSWORD <<EOF
    db = db.getSiblingDB('$MONGO_INITDB_DATABASE');
    use '$MONGO_INITDB_DATABASE';
    db.createUser({
        user: 'john', 
        pwd: '12345', 
        roles: [{
            role: 'readWrite', 
            db: '$MONGO_INITDB_DATABASE'
        }]
    });
EOF

有什么我想念的嗎?

如果在init-mongo.shcreateUser之后添加show users ,您將在docker-compose logs中找到下一個:

mongo_db   | {
mongo_db   |    "_id" : "'datadb'.john",
mongo_db   |    "userId" : UUID("92abb590-3d2a-44d1-bde4-58b3b3acd1d8"),
mongo_db   |    "user" : "john",
mongo_db   |    "db" : "'datadb'",
mongo_db   |    "roles" : [
mongo_db   |            {
mongo_db   |                    "role" : "readWrite",
mongo_db   |                    "db" : "datadb"
mongo_db   |            }
mongo_db   |    ],
mongo_db   |    "mechanisms" : [
mongo_db   |            "SCRAM-SHA-1",
mongo_db   |            "SCRAM-SHA-256"
mongo_db   |    ]
mongo_db   | }

你可以看到它變成了"'datadb'.john" ,而不是"datadb.john" ,這意味着現在的數據庫名稱是'datadb' ,而不是datadb 所以應該改變init-mongo.sh的下一行,而不是use '$MONGO_INITDB_DATABASE'; ,但接下來:

use $MONGO_INITDB_DATABASE;

然后, docker-compose down -v (加上 -v 刪除卷,所以數據庫在 up 時會重新初始化,你可以看到效果), docker-compose up -d ,最后檢查一下:

> use datadb;
switched to db datadb
> show users;
{
        "_id" : "datadb.john",
        "userId" : UUID("0e643984-48f9-4da4-a3ea-0e7159240724"),
        "user" : "john",
        "db" : "datadb",
        "roles" : [
                {
                        "role" : "readWrite",
                        "db" : "datadb"
                }
        ],
        "mechanisms" : [
                "SCRAM-SHA-1",
                "SCRAM-SHA-256"
        ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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