我通过运行以下命令来设置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,可能是端口对传入请求不开放,但我不知道如何检查或更改它。
1条答案
按热度按时间nx7onnlm1#
驱动程序将尝试解析用作联系点的主机名。联系人需要主机名或ip地址。
在你的情况下,不用
my-cassandra
这是用户定义的网络名称,请使用ip地址:在docker运行时,可以使用桥接/主机网络或
-P
或者-p 9042:9042
: