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。
问题原因
- 端口映射错误:Docker Compose里把宿主机9042端口映射到了容器的9050端口,但ScyllaDB默认的CQL服务端口是9042,容器内实际监听的是9042端口,端口不匹配导致外部无法通过9042访问到容器内的CQL服务。
- 连接地址错误:代码里用
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
相关产品推荐
相关产品推荐

