Dockerシリーズチュートリアル02-MongoDBデフォルト認証

2524 ワード

説明、私がここで使っているのはcomposeのバージョンの1.17.0フォーマットは3ですが、これはcomposeのバージョンとは関係なく、MONGOを追加するだけです.INITDB_ROOT_USERNAMEとMONGO_INITDB_ROOT_PASWORDはあなたの環境変数に入ればいいです.
#公式mongo:3.2のimageを使用して、composeファイルは以下の通りです.環境変数MONGOに追加するとINITDB_ROOT_USERNAMEとMONGO_INITDB_ROOT_PASWORD(1つ欠けてはいけない)後mongodbは自動的に権限検証を開き、mongo公式ミラーファイルのdocker-entrypoint.shスクリプトに表示されます.https://github.com/docker-library/mongo/blob/00a8519463e776e797c227681a595986d8f9dbe1/3.0/docker-entrypoint.sh
version: '3'
services:
  mongo:
    image: mongo:3.2
    ports:
      - "27017:27017"
    volumes:
      - mongo-data:/data/db
    networks:
      - backend
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: root.123
volumes:
  mongo-data:
networks:
  backend:

#サービスを作成します.ここではswarmクラスタを使用しています.
docker stack  deploy gionee -c=./docker-compose.yml
#容器内部に入り、mongo容器idを自分で表示する
docker exec -it 7c10b03dcf3a/bin/bash
#mongoコマンドの実行
mongo
#まずコマンドshow dbsを使用して、認証をオンにするかどうかを確認します.
2017-11-29T07:46:27.950+0000 E QUERY    [thread1] Error: listDatabases failed:{
        "ok": 0,
        "errmsg": "not authorized on admin to execute command { listDatabases: 1.0 }",
        "code": 13

説明はすでに鑑権を開いて、下へ歩き続けた.エラーメッセージが表示されていない場合は、mongoにデフォルトの認証権がないことを示します.compose.ymlのMONGOを確認する必要があります.INITDB_ROOT_USERNAMEとMONGO_INITDB_ROOT_PASWORDのフォーマットが正しいかどうか、ymlの文法はとても厳しいです
#デフォルトではtestデータベースにアクセスし、adminデータベースに切り替える必要があります
use admin
#adminユーザーの追加
db.createUser( {
 user: "admin",
 pwd: "123456",
 roles: [ {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }, 
        {
            "role" : "readWriteAnyDatabase",
            "db" : "admin"
        }, 
        {
            "role" : "dbAdminAnyDatabase",
            "db" : "admin"
        } ]
});

#adminユーザーへのログイン
db.auth("admin","123456")
ユーザーを追加したいデータベースに入り、操作したいデータベースを切り替えることを忘れないでください.smartdbです.
use smartdb
#ユーザーの追加、権限の指定、およびデータベースreadWriteの読み書き権限の指定
db.createUser(
     {
       user: "smart",
       pwd: "123456",
       roles: [
          { role: "readWrite", db: "smartdb" }
       ]
     }
 )

#ユーザーが使用可能かどうかを確認します.1を返すと成功します.
db.auth("smart","123456")