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

如何在docker compose启动Couchbase后正确执行schema脚本

解决方案

核心问题是你当前的配置直接替换了Couchbase镜像的默认启动命令,不仅没有启动Couchbase服务,还直接执行初始化脚本,自然会失败。正确的编排方式如下:

1. 拆分服务,新增独立的初始化服务

将Couchbase服务本身和初始化脚本拆分为两个独立服务,避免覆盖Couchbase的默认启动逻辑。

2. 给Couchbase服务添加健康检查

通过健康检查确认Couchbase完全启动就绪后,再执行初始化脚本。

3. 修改后的docker-compose.yml配置

version: '3.8' # 建议使用3.8及以上版本,支持depends_on的condition参数

services:
  couchbase:
    image: couchbase:community-6.0.0
    deploy:
      replicas: 1
    ports:
      - 8091:8091
      - 8092:8092
      - 8093:8093
      - 8094:8094
      - 11210:11210
    volumes:
      - ./:/data
    container_name: couchbase
    # 新增健康检查,判断服务是否完全启动
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8091/ui/index.html"]
      interval: 5s
      timeout: 3s
      retries: 20
      start_period: 10s # 给Couchbase预留初始启动时间

  couchbase-init:
    image: couchbase:community-6.0.0 # 复用相同镜像,自带couchbase-cli等操作工具
    volumes:
      - ./:/data
    depends_on:
      couchbase:
        condition: service_healthy # 等couchbase服务健康后再启动初始化任务
    # 执行初始化脚本,脚本内Couchbase地址直接填服务名couchbase即可,容器网络内可直接解析
    command: /bin/bash -c "/data/cb-create.sh"

volumes:
  kafka-data:

4. 初始化脚本补充优化

建议在cb-create.sh开头添加简单的重试逻辑,进一步避免偶发的服务未就绪问题:

#!/bin/bash
# 等待Couchbase接口就绪
until curl -s http://couchbase:8091 > /dev/null; do
  echo "等待Couchbase服务启动..."
  sleep 2
done
# 后续接你原有schema初始化逻辑

内容的提问来源于stack exchange,提问作者Sankalp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 20:54:07