Docker部署Cassandra报ConnectionRefusedError连接被拒解决方法
解决方案
按以下顺序排查修复即可:
- 修正
expose配置错误。expose字段声明的是容器内部进程监听的端口,Cassandra官方镜像默认CQL客户端服务端口为9042,你当前配置写的expose: - '6000'无效,容器内无进程监听6000端口,将该值改为'9042'。 - 对齐客户端连接端口配置。你贴的报错里同时出现了8000、6000两个端口,说明客户端连接参数存在冲突。如果保留当前
6000:9042的端口映射规则(即宿主机6000端口转发到容器9042端口),必须明确指定客户端连接地址为127.0.0.1:6000,删除配置里无关的8000端口参数。 - 等待Cassandra完全初始化。Cassandra启动初始化耗时较长(通常1-2分钟,视机器性能而定),容器刚启动时服务未就绪也会报连接拒绝。可执行
docker ps确认容器处于运行状态,再通过docker logs -f <你的cassandra容器名>查看启动日志,等日志出现Starting listening for CQL clients on /0.0.0.0:9042字样时,才代表服务可正常连接。 - 排查端口占用问题。如果配置修正、容器启动完成后仍然报错,检查宿主机6000端口是否被其他进程占用:Windows环境执行
netstat -ano | findstr :6000即可查看占用进程,要么关闭占用进程,要么修改compose里的宿主机映射端口换个未被占用的端口即可。
修正后的可用docker-compose.yml参考如下:
networks: app-tier: driver: bridge services: cassandra: image: 'cassandra:latest' networks: - app-tier expose: - '9042' ports: - '6000:9042'
如果不需要自定义宿主机端口,直接把ports配置改成'9042:9042',客户端连接默认的9042端口即可,能进一步降低端口配置出错的概率。
内容的提问来源于stack exchange,提问作者Dixcy
相关产品推荐
相关产品推荐

