2

我通过运行以下命令来设置 Cassandra 容器:这将从 docker hub 拉取 Cassandra docker 映像并使用 Cassandra 启动容器

  1. docker 网络创建 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:最新的 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 没有太多经验,所以我不确定为什么我的应用程序没有连接到数据库,也许是端口没有对传入请求开放,但我不知道如何检查或者改变它。

4

1 回答 1

2

驱动程序将尝试解析用作联系点的主机名。联系点需要主机名或 IP 地址。

在您的情况下,不要使用my-cassandra用户定义的网络名称,而是使用 IP 地址:

const contactPoints = ['127.0.0.1'];

在 docker run 上,您可以使用桥接/主机网络或使用-Por -p 9042:9042

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