2017-11-30 7 views
1

私はDockerを使ってMongoDB Clusterをセットアップしています。新しいコンフィギュレーションで説明されているホストが1つもないレプリカセットmy-mongo-setはこのノードにマップされます

私はネットワークブリッジを共有する3つのコンテナを起動するbashスクリプトを持っています。私はネットワーク内のすべてのMongoDBデータベースに接続することができます。

NodeJSスクリプトは、クラスタのメンバーをネットワークに追加します。私は次のエラーを取得するaddMembersを起動するたびに

async function configure() { 
    let database = await connect(); 

    let adminDb = database.admin(); 

    await addMembers(adminDb); 

    await returnStatus(adminDb); 
} 

async function connect() { 
    return await MongoClient.connect("mongodb://localhost:30002/test"); 
} 

async function addMembers(admin) { 
    var config = { 
     "_id" : "my-mongo-set", 
     "members" : [ 
      { 
       "_id" : 0, 
       "host" : "mongo0:30002" 
      }, 
      { 
       "_id" : 1, 
       "host" : "mongo1:30003" 
      }, 
      { 
       "_id" : 2, 
       "host" : "mongo2:30004" 
      } 
     ]}; 

    return admin.command({replSetInitiate : config}); 
} 

async function returnStatus(admin) { 
    return admin.command({replSetGetStatus : 1}); 
} 

docker rm -v -f mongo0 
docker rm -v -f mongo1 
docker rm -v -f mongo2 

docker network create my-mongo-cluster 

docker run -d \ 
-p 30002:27017 \ 
--name mongo0 \ 
--net my-mongo-cluster \ 
mongo mongod --replSet my-mongo-set 

docker run -d \ 
-p 30003:27017 \ 
--name mongo1 \ 
--net my-mongo-cluster \ 
mongo mongod --replSet my-mongo-set 

docker run -d \ 
-p 30004:27017 \ 
--name mongo2 \ 
--net my-mongo-cluster \ 
mongo mongod --replSet my-mongo-set 

node setupDatabase.js 

NodeJSスクリプト私の理解から

No host described in new configuration 1 for replica set my-mongo-set maps to this node

これは、MongoDBのは、特定のメンバーに接続できないことを意味します。しかし彼らはすべて自分の名前を持ち、ネットワークブリッジを共有しています。だから彼らはお互いに接続できるはずです。

この問題の原因は何ですか?

+1

このコンテナの設定にコンテナはので、各ホストのための内部ポートを使用している、27017 – Matt

+0

@Matt私はバカだよ、ありがとう!回答を作成する場合は、解決策として回答を受け入れることができます。 – Jamie

+1

ポート内のポートを扱うときに心配する必要はありません。回答が追加されました。 – Matt

答えて

2

レプリケーションセットの構成は、コンテナにコンテナので、内部アドレスとポートが必要ですcontainer:27017

var config = { 
    "_id" : "my-mongo-set", 
    "members" : [ 
     { 
      "_id" : 0, 
      "host" : "mongo0:27017" 
     }, 
     { 
      "_id" : 1, 
      "host" : "mongo1:27017" 
     }, 
     { 
      "_id" : 2, 
      "host" : "mongo2:27017" 
     } 
    ]}; 

であることはドッカー経由で接続することが可能ですポートをマッピングされたが、その後、あなたはドッカーというホスト名/アドレスを使用する必要がありますホストは応答することができます。また、コンテナに出入りするための不必要なネットワーク・ホップも含まれます。

関連する問題