通过Docker Compose部署Couchbase集群:无法创建Bucket及Query服务
问题:Docker Compose部署Couchbase集群自动初始化失败
使用Docker Compose部署Couchbase集群,期望启动后自动完成集群初始化、启用Query服务并创建指定Bucket,但所有容器创建后,访问localhost:8091始终进入集群初始化页面,Bucket及Query服务未成功创建。
原Docker Compose配置如下:
version: '3' services: zookeeper: image: confluentinc/cp-zookeeper:7.0.1 container_name: zookeeper ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 broker: image: confluentinc/cp-kafka:7.0.1 container_name: broker ports: - "9092:9092" depends_on: - zookeeper environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT_INTERNAL://broker:29092 KAFKA_OFFSET_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 couchbase: image: couchbase:7.0.1 container_name: couchbase ports: - "8091-8094:8091-8094" - "11207-11211:11207-11211" environment: COUCHBASE_SERVER_VERSION: 7.0.1 COUCHBASE_USERNAME: admin COUCHBASE_PASSWORD: password COUCHBASE_BUCKET: broker-events COUCHBASE_BUCKET_RAMSIZE: 256 COUCHBASE_ANALYTICS_MEMORY_QUOTA: 1024 COUCHBASE_FEATURES: query COUCHBASE_INDEX_STORAGE_SETTING: memopt COUCHBASE_SERVICES: data,index,query volumes: - couchbase-data:/opt/couchbase/var couchbase-wait: image: alpine container_name: couchbase-wait depends_on: - couchbase command: > /bin/sh -c "apk add --no-cache curl && until curl --silent --fail http://couchbase:8091 >/dev/null; do sleep 5; done; echo 'Couchbase cluster is now available'; sleep 10; curl --silent --fail -u admin:password -X POST http://admin:password@couchbase:8091/pools/default -d memoryQuota=1024 -d indexMemoryQuota=256; echo 'Couchbase pool created'; curl --silent --fail -u admin:password -X POST http://admin:password@couchbase:8091/pools/default/buckets -d name=broker-events -d bucketType=couchbase -d ramQuotaMB=256 -d authType=sasl -d saslPassword=; echo 'Couchbase bucket created'; exit 0;" volumes: couchbase-data:
解决建议
修复API认证冲突:
couchbase-wait中的curl请求同时使用-u参数和URL中的admin:password@,会导致认证逻辑冲突。只保留一种认证方式即可,比如去掉URL中的认证信息,仅用-u admin:password。补充集群初始化核心步骤:当前脚本跳过了关键的集群初始化流程,需要先设置管理员账号、启用服务,再配置资源和创建Bucket。在修改pools的命令前添加:
# 设置初始管理员账号 curl -X POST http://couchbase:8091/nodes/self/controller/settings -d username=admin -d password=password; # 启用data、index、query服务(URL编码逗号为%2C) curl -u admin:password -X POST http://couchbase:8091/node/controller/setupServices -d services=kv%2Cindex%2Cquery;移除无效环境变量:官方Couchbase镜像不支持
COUCHBASE_USERNAME、COUCHBASE_BUCKET这类自动初始化的环境变量,这些是第三方封装镜像的参数,需完全通过脚本完成初始化。修改后的couchbase-wait命令示例:
/bin/sh -c "apk add --no-cache curl && until curl --silent http://couchbase:8091 >/dev/null; do sleep 5; done; echo 'Couchbase cluster is now available'; sleep 10; # 设置初始管理员账号 curl -X POST http://couchbase:8091/nodes/self/controller/settings -d username=admin -d password=password; # 启用所需服务 curl -u admin:password -X POST http://couchbase:8091/node/controller/setupServices -d services=kv%2Cindex%2Cquery; # 设置内存配额 curl -u admin:password -X POST http://couchbase:8091/pools/default -d memoryQuota=1024 -d indexMemoryQuota=256; # 创建Bucket curl -u admin:password -X POST http://couchbase:8091/pools/default/buckets -d name=broker-events -d bucketType=couchbase -d ramQuotaMB=256 -d authType=sasl -d saslPassword=; echo 'Couchbase initialization completed'; exit 0;"清理残留数据卷:如果之前的失败导致数据卷中存在无效配置,先清理再重启:
docker-compose down -v docker-compose up -d排查API错误:去掉curl命令中的
--silent --fail参数,能看到具体的API调用报错信息,方便定位问题。
内容的提问来源于stack exchange,提问作者Carl Sanc
相关产品推荐
相关产品推荐

