2

次のコマンドを実行して Cassandra コンテナーをセットアップします。これにより、Cassandra Docker イメージが Docker ハブからプルされ、Cassandra でコンテナーが起動されます

  1. docker network create cassandra-net
  2. docker run --name my-cassandra --network cassandra-net -d cassandra:latest
  3. docker run --name my-cassandra-1 --network cassandra-net -d -e CASSANDRA_SEEDS=my-cassandra cassandra:latest
  4. docker run -it --rm --network cassandra-net cassandra:latest cqlsh my-cassandra

次に、キースペースを作成しました

CREATE KEYSPACE user_keyspace WITH REPLICATION={'class': 'SimpleStrategy', 'replication_factor': 3};

その中にユーザーテーブルがあります。

私のnode.jsコードは

const cassandra = require('cassandra-driver');
var contactPoints = ['my-cassandra:9042'];
const client = new cassandra.Client({
    contactPoints: contactPoints,
    localDataCenter: 'datacenter1',
    keyspace: 'user_keyspace'
});

client.connect(function (err) {
    if (err) {
        console.log('Error in connnection: ', err); return;
    }
    console.log('Cassandra connected');
});

接続時にエラーが発生しました

NoHostAvailableError: 非同期 Client._connect (/app/node_modules/cassandra-driver/lib/) の ControlConnection.init (/app/node_modules/cassandra-driver/lib/control-connection.js:203:13) でホストを解決できませんでしたclient.js:513:5) { name: 'NoHostAvailableError', info: '使用可能なホストがないか、ドライバーがアクセスできないためにクエリを実行できない場合のエラーを表します.', message: 'ホストを解決できませんでした'、内部エラー: {}

私は Cassandra や Docker の経験があまりないので、アプリが DB に接続していない理由がわかりません。おそらくポートが着信要求に対して開かれていないためですが、どのように確認すればよいかわかりません。またはそれを変更します。

4

1 に答える 1

2

ドライバーは、接続ポイントとして使用されるホスト名を解決しようとします。連絡先には、ホスト名または IP アドレスが必要です。

my-cassandraあなたの場合、ユーザー定義のネットワーク名を使用する代わりに、IP アドレスを使用します。

const contactPoints = ['127.0.0.1'];

docker の実行では、ブリッジ/ホスト ネットワークを使用するか、 または を使用でき-Pます-p 9042:9042

docker run -it --rm -P cassandra:latest cqlsh my-cassandra
于 2020-05-28T10:01:05.370 に答える