无法加入Docker Compose部署的Couchbase集群问题求助
问题:更换Couchbase镜像后自动配置集群和Bucket失效的问题
问题背景
原本使用第三方镜像bentonam/couchbase-docker:community部署Couchbase,对应的docker-compose.yaml配置如下:
volumes: couchbasedata: name: "couchbase" external: false networks: local: name: "local" services: couchbase: image: bentonam/couchbase-docker:community container_name: couchbase networks: - local environment: CLUSTER_USERNAME: Administrator CLUSTER_PASSWORD: password CLUSTER_NAME: LocalCouchbaseCluster SERVICES: data,index,query,fts CLUSTER_RAMSIZE: 1024 BUCKET: testbucket BUCKET_RAMSIZE: 256 volumes: - couchbasedata:/opt/couchbase/var ports: - 8091-8094:8091-8094 - 11210:11210
更换为官方镜像couchbase:community-7.1.1后,删除旧容器、镜像和卷,执行docker-compose -f "\.\docker-compose.yaml" up -d启动,出现以下问题:
- 访问
localhost:8091需选择新建/加入集群,无法直接进入登录页 - 选择“加入现有集群”并输入集群名
LocalCouchbaseCluster,报错:Failed to connect to http://LocalCouchbaseCluster:8091. Failed to resolve address for "LocalCouchbaseCluster". The hostname may be incorrect or not resolvable. - 用
localhost或127.0.0.1尝试加入集群,报错:Adding nodes to not provisioned nodes is not allowed - 新建集群后,需手动创建
testbucket,无法自动完成配置
核心原因
第三方bentonam/couchbase-docker镜像封装了自定义初始化脚本,能通过环境变量自动完成集群初始化、Bucket创建等操作;而官方couchbase镜像默认无此逻辑,需要通过官方工具或指定环境变量实现自动配置。
解决办法
方法1:使用官方couchbase-cli命令初始化(推荐)
修改docker-compose.yaml,添加command字段,通过脚本完成服务启动、集群初始化和Bucket创建:
volumes: couchbasedata: name: "couchbase" external: false networks: local: name: "local" services: couchbase: image: couchbase:community-7.1.1 container_name: couchbase networks: - local environment: CLUSTER_USERNAME: Administrator CLUSTER_PASSWORD: password volumes: - couchbasedata:/opt/couchbase/var ports: - 8091-8094:8091-8094 - 11210:11210 command: > bash -c " /entrypoint.sh couchbase-server & sleep 15 couchbase-cli cluster-init -c localhost:8091 \ --cluster-username=$${CLUSTER_USERNAME} \ --cluster-password=$${CLUSTER_PASSWORD} \ --cluster-name=LocalCouchbaseCluster \ --services=data,index,query,fts \ --cluster-ramsize=1024 couchbase-cli bucket-create -c localhost:8091 \ --username=$${CLUSTER_USERNAME} \ --password=$${CLUSTER_PASSWORD} \ --bucket=testbucket \ --bucket-ramsize=256 wait "
说明:
- 先启动Couchbase服务,等待15秒确保服务就绪(可根据实际情况调整等待时间)
- 通过
couchbase-cli cluster-init完成集群初始化,配置用户名、密码、集群名称、服务类型及内存 - 通过
couchbase-cli bucket-create创建指定Bucket wait命令确保容器保持运行状态
方法2:使用官方自动初始化环境变量(7.0+版本支持)
官方镜像从7.0版本开始支持部分自动初始化环境变量,需注意变量名与第三方镜像的区别:
environment: COUCHBASE_ADMINISTRATOR_USERNAME: Administrator COUCHBASE_ADMINISTRATOR_PASSWORD: password COUCHBASE_CLUSTER_NAME: LocalCouchbaseCluster COUCHBASE_SERVICES: data,index,query,fts COUCHBASE_CLUSTER_RAM_SIZE: 1024 COUCHBASE_BUCKETS: "testbucket:256"
说明:
- 官方变量前缀为
COUCHBASE_,与第三方镜像的无前缀变量不兼容 COUCHBASE_BUCKETS格式为bucketName:ramSize,多Bucket用逗号分隔- 需确保镜像版本为7.0及以上,部分版本可能需额外配置
报错原因解释
- 输入
LocalCouchbaseCluster加入集群:Docker容器内未配置该主机名的DNS解析,无法识别此地址 - 用
localhost/127.0.0.1加入集群:此时节点未完成初始化,官方镜像默认不会自动初始化集群,因此提示无法向未配置节点添加新节点
内容的提问来源于stack exchange,提问作者raz
相关产品推荐
相关产品推荐

