You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker中使用C# Driver连接ScyllaDB失败问题求助

ScyllaDB Docker单节点与C# Driver连接失败排查

问题背景

已通过Docker Compose搭建并启动单节点ScyllaDB,配置如下:

version: "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

使用DataStax C# Driver编写连接代码后无法正常工作,代码片段:

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

执行到Connect方法时抛出错误:

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

目前通过cqlsh工具可正常连接ScyllaDB,能创建并查询Keyspace。

问题原因

  1. 端口映射错误:Docker Compose里把宿主机9042端口映射到了容器的9050端口,但ScyllaDB默认的CQL服务端口是9042,容器内实际监听的是9042端口,端口不匹配导致外部无法通过9042访问到容器内的CQL服务。
  2. 连接地址错误:代码里用0.0.0.0作为连接地址是错误的,0.0.0.0是服务的监听地址(表示监听容器所有网卡),不是客户端的连接地址,客户端应该用宿主机的127.0.0.1来连接容器内的服务。

解决方案

1. 修正Docker Compose配置

修改端口映射为9042:9042,确保宿主机端口和容器内CQL端口对应:

services:
 scylla-node1:
   # 其他配置保持不变
   ports: 
       - 9042:9042

2. 修正C#连接代码

将连接地址改为127.0.0.1:

var cluster = Cluster.Builder()
                 .AddContactPoints("127.0.0.1")
                 .Build();
var session = cluster.Connect("sample_keyspace");

3. 重启容器

执行以下命令重启ScyllaDB容器,让配置生效:

docker-compose down && docker-compose up -d

额外检查项

如果修改后仍无法连接,可以做以下验证:

  • 查看容器日志:执行docker logs scylla-node1,确认ScyllaDB正常启动并监听9042端口。
  • 检查端口占用:Windows用netstat -ano | findstr :9042,Linux/macOS用lsof -i :9042,确认9042端口未被其他程序占用。

内容的提问来源于stack exchange,提问作者Andy5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:55:16