Docker部署Cassandra遇连接错误:无法连接到任何服务器
Cassandra Docker容器连接拒绝问题排查与解决
问题描述
按照Cassandra官方入门指南操作,执行以下命令启动容器:
docker pull cassandra:latestdocker run --name cass_cluster cassandra:latest
容器启动后持续运行(无就绪提示),执行docker exec -it cass_cluster cqlsh时出现连接拒绝错误:
Connection error: ('Unable to connect to any servers', {'127.0.0.1:9042': ConnectionRefusedError(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")})
本地环境信息:
- Java版本:
openjdk version "19.0.2" 2023-01-17 OpenJDK Runtime Environment (build 19.0.2+7-Ubuntu-0ubuntu322.04) OpenJDK 64-Bit Server VM (build 19.0.2+7-Ubuntu-0ubuntu322.04, mixed mode, sharing)
- Python版本:
Python 3.10.12
排查与解决步骤
1. 等待Cassandra初始化完成
Cassandra首次启动需要时间加载schema、初始化系统表,直接执行cqlsh可能过早。先查看容器日志确认就绪状态:
docker logs cass_cluster
当日志出现Created default superuser role 'cassandra'或Startup complete时,再尝试连接。
2. 修改容器启动参数
原启动命令未指定后台运行和集群配置,导致终端被占用且初始化效率低。重新启动容器:
# 清理现有容器 docker stop cass_cluster && docker rm cass_cluster # 后台启动并指定集群参数 docker run --name cass_cluster -d -p 9042:9042 cassandra:latest -seeds cass_cluster -cluster-name TestCluster
-d让容器后台运行,-seeds指定单节点集群的种子节点,-cluster-name明确集群标识,加速初始化。
3. 容器内手动指定IP连接
若日志显示就绪但仍连不上,进入容器内部,用容器实际IP连接:
docker exec -it cass_cluster bash # 获取容器IP并连接 cqlsh $(hostname -i) 9042
如果成功,说明Cassandra未绑定到127.0.0.1,可修改/etc/cassandra/cassandra.yaml:
- 将
listen_address和rpc_address设为0.0.0.0 - 重启服务:
nodetool stopdaemon && cassandra -R
4. 更换稳定版本镜像
latest标签可能对应较新的测试版本,尝试使用稳定版(如4.1):
docker pull cassandra:4.1 docker run --name cass_cluster -d -p 9042:9042 cassandra:4.1
5. 忽略本地Java版本
Docker容器自带Cassandra运行所需的Java环境,本地Java版本不影响容器内服务,无需调整。
内容的提问来源于stack exchange,提问作者user23733163
相关产品推荐
相关产品推荐

