连接docker容器上托管的cassandra时,nodejs获取nohostavailableerror:无法解析任何主机

zaq34kh6  于 2021-06-13  发布在  Cassandra
关注(0)|答案(1)|浏览(424)

我通过运行以下命令来设置cassandra容器:这将从docker hub中提取cassandra docker映像,并用cassandra启动一个容器
docker网络创建cassandra网络
docker run--命名为my cassandra--网络cassandra net-dcassandra:latest
docker run--name my-cassandra-1--network cassandra net-d-e cassandra\u seeds=我的Cassandracassandra:latest
docker run-it-rm-网络cassandra netcassandra:latest cqlsh 我的Cassandra
然后创建了一个键空间
create keyspace user\u keyspace with replication={'class':'simplestrategy','replication\u 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:无法在异步客户端的controlconnection.init(/app/node\modules/cassandra driver/lib/control connection.js:203:13)解析任何主机。\u connect(/app/node\modules/cassandra driver/lib/client.js:513:5){name:'nohostavailableerror',info:'表示由于主机不可用或驱动程序无法访问而无法执行查询时出错。'消息:'无法解析主机',innererrors:{}
我对cassandra或docker没有太多的经验,所以我不知道为什么我的应用程序没有连接到db,可能是端口对传入请求不开放,但我不知道如何检查或更改它。

nx7onnlm

nx7onnlm1#

驱动程序将尝试解析用作联系点的主机名。联系人需要主机名或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

相关问题