docker-compose连接Cassandra容器与Spring Boot web容器报202连接节点错误
问题排查与解决方案
核心问题点
- 启动方式错误:你配置了
docker-compose.yml但没有通过docker-compose命令启动服务,而是单独执行docker run启动web应用容器。单独启动的容器不在docker-compose自动创建的专属网桥下,无法解析同compose栈内的服务名,自然无法访问Cassandra容器。 - 服务名拼写错误:
docker-compose.yml中Cassandra的服务名写为casandra(缺失字母s),但你给web应用传递的环境变量CASSANDRA_HOST=cassandra,服务名不匹配就算用compose启动也无法完成域名解析。 - 应用配置未生效:从报错日志可以看到,你的Spring Boot应用尝试连接的Cassandra地址是
127.0.0.1:9042,说明应用没有正确读取CASSANDRA_HOST环境变量,要么是配置文件中写死了127.0.0.1,要么是读取环境变量的配置有误。
修复方案
1. 修正docker-compose.yml配置
官方Cassandra镜像默认已经监听0.0.0.0,无需手动修改配置文件,修正后的compose配置如下:
version: '3' services: # 修正服务名拼写为cassandra cassandra: image: cassandra:3.11.11 # 明确指定版本,避免latest标签版本不一致问题 # 可选:暴露端口方便本地工具连接Cassandra ports: - "9042:9042" # 添加健康检查,确保Cassandra完全就绪后再启动应用 healthcheck: test: ["CMD", "cqlsh", "-e", "describe keyspaces"] interval: 5s timeout: 5s retries: 10 myapp: image: centos7-tomcat9-myapp ports: - "8888:8080" depends_on: cassandra: # 等待cassandra健康检查通过再启动 condition: service_healthy environment: - CASSANDRA_HOST=cassandra
2. 修正Spring Boot配置
确认你的Cassandra连接配置是从环境变量读取,示例Spring Boot application.yml配置参考:
spring: cassandra: contact-points: ${CASSANDRA_HOST:127.0.0.1} port: 9042
3. 用正确的命令启动服务
在docker-compose.yml所在目录执行以下命令启动所有服务:
docker-compose up -d
如果需要查看日志排查问题,可以执行:
# 查看所有服务日志 docker-compose logs -f # 单独查看myapp日志 docker-compose logs -f myapp
内容的提问来源于stack exchange,提问作者Luciana Oliveira
相关产品推荐
相关产品推荐

