cassandra 无法使用C#驱动程序连接到Docker中的Scylladb

new9mtju  于 2023-02-12  发布在  Cassandra
关注(0)|答案(1)|浏览(173)

我已经在docker中创建了一个单节点ScyllaDB,它已经启动并运行,下面是我的docker-compose命令:版本:"3"

services:

 scylla-node1:
   container_name: scylla-node1
   image: scylladb/scylla
   restart: always
   command: --smp 2 --memory 1500M --broadcast-rpc-address 127.0.0.1 --listen-address 0.0.0.0 
   ports: 
       - 9042:9050
   networks:
   web:

   networks:
   web:
   driver: bridge

阅读Scylla的文档时,它建议使用DataStax C#Driver for Apache Cassandra。因此,我在我的解决方案中使用了这个驱动程序。按照基本的示例,我很难让它工作。因此,

var cluster = Cluster.Builder()
                 .AddContactPoints("0.0.0.0")
                 .Build();

  var session = cluster.Connect("sample_keyspace");

当代码到达Connect命令时,它会引发以下错误Cassandra. NoHostAvailableException:'尝试查询的所有主机均失败(尝试的主机为0.0.0.0:9042:SocketException '请求的地址在其上下文中无效。')'
首先,我可以通过CSQL实用程序连接到Scylla,并创建一个Keyspace,然后运行一个查询来确认Keyspace是否已经创建。
这是C#驱动程序的问题还是我做错了什么?

xwmevbvl

xwmevbvl1#

在我看来,这像是网络问题,因为您的Docker容器似乎没有正确配置。
问题是C#驱动程序(您的应用程序)无法连接到容器,因为没有网络连接。这就是这个异常的含义:

Cassandra.NoHostAvailableException: 'All hosts tried for query failed (tried 0.0.0.0:9042: \
  SocketException 'The requested address is not valid in its context.')'

我假设“CSQL实用程序”是一个拼写错误。您能够使用cqlsh进行连接的原因是因为您最有可能连接到:

$ docker exec -it scylla-node1 cqlsh

这和远程连接不一样。公平地说,我只是假设,因为你没有提供细节。
你已经用--broadcast-rpc-address 127.0.0.1配置了容器,所以它只监听localhost上的客户端连接,这意味着你不能用0.0.0.0作为联系点。
我还注意到,您已经将容器端口9050Map到主机端口9042

ports: 
       - 9042:9050

默认情况下,Cassandra在端口9042上监听客户端连接,而不是9050。如果端口9050上没有监听到任何内容,则驱动程序没有连接到任何内容,也将导致NoHostAvailableException

相关问题