Java应用无法连接Docker Compose部署的Couchbase集群,报连接拒绝
解决Couchbase Java应用连接失败问题
问题根源分析
从你提供的信息来看,问题核心来自两方面:
- Couchbase容器启动后未完成集群初始化配置,导致应用连接时提示需要创建集群
- 容器网络、启动顺序或连接配置错误,引发
Connection refused错误
分步解决方案
1. 完成Couchbase集群初始化
你看到的界面是Couchbase的初始化配置页,必须先完成集群设置才能让应用正常连接:
- 访问
http://localhost:8091(宿主机端口) - 按照引导完成配置:
- 设置集群名称、管理员用户名和密码(请妥善记录这两个值)
- 勾选需要启用的服务(至少启用Data和Query服务,按需添加其他服务)
- 等待初始化完成,确认所有服务启动正常
如果需要自动化初始化(避免每次启动容器手动配置),可以修改docker-compose.yml的db服务,添加初始化脚本:
db: image: 'couchbase:7.6.0' restart: always container_name: db deploy: replicas: 1 ports: - 8091:8091 - 8092:8092 - 8093:8093 - 8094:8094 - 11210:11210 networks: - my-network command: > bash -c " /entrypoint.sh couchbase-server & sleep 30 && couchbase-cli cluster-init -c localhost:8091 --cluster-username admin --cluster-password password --cluster-name my-cluster --services data,query --cluster-ramsize 512 --cluster-index-ramsize 256 wait "
注意:替换--cluster-username、--cluster-password为自定义账号信息,内存配置根据宿主机资源调整
2. 修正Java应用的连接配置
确保代码中使用正确的连接参数:
- 连接地址:Docker容器网络内使用服务名
db作为主机地址,而非localhost。示例代码:Cluster cluster = Cluster.connect("couchbase://db", ClusterOptions.clusterOptions("admin", "password")); - 认证信息:使用初始化Couchbase时设置的用户名和密码
- 桶(Bucket):确认你要连接的桶已在Couchbase中创建(可在初始化时创建,或通过控制台添加)
3. 修复容器启动顺序问题
depends_on仅保证Couchbase容器启动,但不等待其服务就绪。可通过两种方式解决:
- 应用内添加重试逻辑:在Java代码中实现连接重试机制,比如循环尝试连接直到成功
- Docker Compose健康检查:给
db服务添加健康检查,让应用等待Couchbase服务就绪后再启动:db: # 其他配置保持不变 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8091/pools/default"] interval: 10s timeout: 5s retries: 5 app: # 其他配置保持不变 depends_on: db: condition: service_healthy
内容的提问来源于stack exchange,提问作者ozdem
相关产品推荐
相关产品推荐

