You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java应用无法连接Docker Compose部署的Couchbase集群,报连接拒绝

解决Couchbase Java应用连接失败问题

问题根源分析

从你提供的信息来看,问题核心来自两方面:

  • Couchbase容器启动后未完成集群初始化配置,导致应用连接时提示需要创建集群
  • 容器网络、启动顺序或连接配置错误,引发Connection refused错误

分步解决方案

1. 完成Couchbase集群初始化

你看到的界面是Couchbase的初始化配置页,必须先完成集群设置才能让应用正常连接:

  • 访问http://localhost:8091(宿主机端口)
  • 按照引导完成配置:
    1. 设置集群名称、管理员用户名和密码(请妥善记录这两个值)
    2. 勾选需要启用的服务(至少启用Data和Query服务,按需添加其他服务)
    3. 等待初始化完成,确认所有服务启动正常

如果需要自动化初始化(避免每次启动容器手动配置),可以修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 14:12:42