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

Dockerとmongo-go-driverサーバーの選択エラー

    これは、未解決のhostnameが原因です。 Dockerホストから。 Dockerでは、インスタンスmongo1mongo2 、およびmongo3 それらの名前で到達可能です。ただし、これらの名前にはDockerホストからアクセスできません。これは次の行から明らかです:

    Addr: mongo2:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: dial tcp: lookup mongo2: no such host
    

    MongoDBドライバーはserver discoveryを試みます 与えられたレプリカセットメンバーから。レプリカセット内の他のすべてのノードを検索します( rs.conf )。ここでの問題は、レプリカセットがmongo<N>という名前で設定されていることです。 、ドライバー(Dockerホストで実行)はこれらの名前を解決できません。これは、mongo1にpingを実行して確認できます。 Dockerホストから。

    レプリカセットと同じDockerネットワークを共有する別のDockerインスタンスからアプリケーションを実行してみてください。または、解決可能なホスト名を許可するようにDockerネットワークを変更します。

    更新:

    mongo を使用する理由についてのコメントについて シェル、または PyMongo 動作します。

    これは、接続モードの違いによるものです。単一のノードを指定する場合、つまりmongodb://node1:27017 シェルまたはPyMongoでは、サーバーの検出は行われません。代わりに、(レプリカセットとしてではなく)その単一ノードへの接続を試みます。問題は、書き込むレプリカセットのプライマリノードに接続する必要があることです(どちらを知っている必要があります)。レプリカセットとして接続する場合は、レプリカセット名を定義する必要があります。

    mongo-go-driverとは対照的 、デフォルトでは、サーバー検出を実行し、レプリカセットとして接続を試みます。単一ノードとして接続する場合は、connect=directを指定する必要があります 接続URIで。 例のConnectDirect も参照してください。




    1. Mongoクエリには時間がかかります。どうすればもっと速くできますか?

    2. mongoDBの巨大な配列に集約する方法は?

    3. mongodb clipretty printを有効にするにはどうすればよいですか? --db.col.find()。pretty()が機能しない

    4. Dockerコンテナからホストにワイルドカードを使用してフォルダをコピーします