2016-10-18 14 views
6

でMongoのコンテナを作成し、私は作曲で作成されているのmongoコンテナを持っています。ドッキングウィンドウ-構成するユーザー名とパスワード

version: '2' 
volumes: 
    mongodata: 
    driver: local 
services: 
    mongo: 
    image: mongo:latest 
    hostname: ${MONGODB_HOST} 
    restart: always 
    ports: 
     - "27017:27017" 
    volumes: 
     - mongodata:/data/db 

これは完璧に動作しますが、しかし今私はデータベースにパスワードを付けたいです。これを行うには、まず私が理解しているように、データベースを作成し、パスワードを追加してから、--authフラグでそれを再起動する必要があります。私の質問は、ドッカーの作成でこのプロセスを実行する方法です。

ドッカーの作成なしですべてを行うと、これを行うことができます。作成時に発生する問題は、

です。a)ドッカーの作成は、ドッカーネットワーク内で動作します。 b)docker-composeは、生産中に最初とは異なるコマンドを実行することはできません。 - これは重要です。最初に--authを実行して初めてパスワードを設定することができると言う人もいますが、これは当てはまりません。 、

# start the temporary container 
docker run -d -v /tmp/mongodb --name tmpdb -e MONGODB_DBNAME=db_test mongo --auth 
# do the user creation 
docker run -it --link tmpdb --rm mongo sh -c 'mongo --host tmpdb --eval "db.createUser({ user: \"admin\", pwd: \"password\", roles: [ { role: \"root\", db: \"admin\" } ] });"' 
# stop the server 
docker stop tmpdb 
# create new mongodb container, using the old ones data 
docker run -d -p 27017:27017 --name mongo2 -e MONGODB_DBNAME=db_test mongo --auth 
# clean up old container (we are using the volumes so they will stick around) 
docker rm tmpdb 

このファイルは、一時的なコンテナを作成し、その上にユーザ名/パスワードを設定します:私が働き始めた

一つの解決策は、私がドッキングウィンドウ-COMPOSEファイルを実行する前に、すべての私のサーバー上で実行されますシェルスクリプトでした元のコンテナを停止し、古いコンテナを使用して新しいコンテナを作成し、元のコンテナを削除します。新しいmongoコンテナにパスワードが設定されました。

私の最終的な質問は、これをドッカーで作成する最良の方法は何ですか? :

私のドッキングウィンドウ・コンファイルで私の他のコンテナがモンゴにアクセスできるようにする必要がありますので、私はMongoのデータを保持するボリューム・コンテナがドッキングウィンドウ-COMPOSEは

答えて

1

モンゴを作成し、同じネットワークにあることが必要だと思います(v 3.5)最新のイメージは、2つの環境変数MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORDを受け入れます。

これが設定されている場合、コンテナのエントリポイントスクリプトは - anhを使用してmongodサービスを開始し、提供された資格情報を持つ管理者ユーザーを作成します。

この

は現在、彼らの READMEに記載されていませんが、その問題の GitHub issue追跡進展があります、そしてソースは docker-entrypoint.shスクリプトのライン 104で提供されています。

version: '3' 
services: 
    mongodb: 
    image: mongo:3.5 
    hostname: ${MONGODB_HOST} 
    environment: 
     - MONGO_INITDB_ROOT_USERNAME=alice 
     - MONGO_INITDB_ROOT_PASSWORD=super-secret-password 
    restart: on-failure 
    ports: 
     - 27017:27017 
    volumes: 
     - ./mongodb:/data/db 

があなたの docker-compose.ymlでこれらの変数を使用するには、次のスニペットを参照してください
関連する問題