sql >> データベース >  >> NoSQL >> MongoDB

docker経由のMongoDBとDocker-認証エラーを作成し、dbを初期化しない

    • 認証部分の場合:--authenticationDatabase adminを追加しようとしましたか ログインできるようにするには?
    • MONGO_INITDB_DATABASEについて /docker-entrypoint-initdb.d/の下にスクリプトがない限り、効果はありません。 docker-entrypoinyに示されているように.sh これはmongodbイメージで使用されるため、docker-entrypoint-initdb.d/でbashスクリプトを使用できます。 そうは言っても。

    • rootユーザーをアプリケーションデータベースの所有者として使用することは、mongodbインスタンス内のすべてを制御する機能を備えているため、セキュリティ上賢明ではありません。

      IMHOのより良いアプローチは、次のような変数を追加することです。

      • MONGO_APPLICATION_DATABASE
      • MONGO_APPLICATION_USERNAME
      • MONGO_APPLICATION_PASSWORD

      次に、ユーザーを作成し、環境変数を使用してデータベースに割り当てるbashスクリプトを追加します(docker-entrypoint-initdb.dにマウントする必要があります):

      # initmongo/setup.sh
      mongo admin -u $MONGO_INITDB_ROOT_USERNAME -p $MONGO_INITDB_ROOT_PASSWORD --eval "db.getSiblingDB('$MONGO_APPLICATION_DATABASE').createUser({user: '$MONGO_APPLICATION_USERNAME', pwd: '$MONGO_APPLICATION_PASSWORD', roles: [{role: 'readWrite', db: '$MONGO_APPLICATION_DATABASE'}]});"
      

      docker-compose.ymlで、現在のボリュームリストにボリュームを追加します

      #docker-compose.yml
      volumes:
        - ".${MONGO_DATA_DIR}:${MONGO_DATA_DIR}"
        - "./initmongo/:/docker-entrypoint-initdb.d/"
      

      そして最後に、この変数MONGO_INITDB_DATABASEを削除します 必要ないので

      ログインするには、次のコマンドを使用します。

      docker exec -it container_name mongo -u "$MONGO_APPLICATION_USERNAME" -p "$MONGO_APPLICATION_PASSWORD" --authenticationDatabase "$MONGO_APPLICATION_DATABASE" "$MONGO_APPLICATION_DATABASE"
      
    • .envの場合 ファイルこの問題の原因がわかりません。使用中に警告はありますか? このコメント も確認することを検討してください またはこれ




    1. MongoDBシェル:名前または正規表現に一致するコレクションを検索する方法

    2. MongoDB.findで2つの$existsを組み合わせる

    3. MongoDB:重複するキーの更新時に挿入

    4. Mongoでのネストされたリストの存在のクエリ