Docker部署Cassandra无法连接NodeJS:NoHostAvailableError/ECONNREFUSED排查
问题根源与解决方案
核心问题:端口映射错误
你当前的docker run命令把主机的9842端口映射到了容器的9842端口,但Cassandra默认的CQL服务端口是9042,容器内的Cassandra根本没在9842端口监听,所以端口映射完全无效,导致NodeJS无法连接。
分步解决:
- 修正Docker启动命令
停止并删除现有容器,重新启动时将主机端口映射到容器的9042端口:
docker stop cassandra-docker docker rm cassandra-docker docker run -d --name cassandra-docker -p 9842:9042 cassandra
这里-p 9842:9042表示把主机的9842端口转发到容器内Cassandra的默认CQL端口9042。
- 调整NodeJS连接配置
对应修改后的端口映射,NodeJS的连接配置应改为:
const client = new cassandra.Client({ contactPoints: ['127.0.0.1:9842'], // 补充其他必要配置:localDataCenter、keyspace等 });
如果你想直接用默认的9042端口,启动容器时用-p 9042:9042,配置就可以写contactPoints: ['127.0.0.1']。
- 额外排查点
- 确认容器状态:执行
docker ps查看cassandra-docker是否处于Up状态,用docker logs cassandra-docker检查启动日志,确保Cassandra完全启动(首次启动需要1-2分钟)。 - 驱动版本:确保你的NodeJS项目使用的
cassandra-driver是最新稳定版,避免版本兼容问题。 - 防火墙检查:确认主机防火墙没有阻止9842或9042端口的入站连接。
内容的提问来源于stack exchange,提问作者iiiasminx
相关产品推荐
相关产品推荐

