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

如何编写脚本并在Docker Compose中创建ScyllaDB的Keyspace与表

解决ScyllaDB容器启动时自动创建Keyspace和Table的问题

步骤1:编写初始化脚本

创建名为init-scylla.sh的脚本,用于等待集群就绪并执行CQL命令:

#!/bin/bash

# 循环等待ScyllaDB主节点可连接
until cqlsh scyllaDB-node1 -e "DESCRIBE KEYSPACES"; do
  echo "等待ScyllaDB节点就绪..."
  sleep 5
done

# 创建Keyspace(按需修改名称和复制策略)
cqlsh scyllaDB-node1 -e "CREATE KEYSPACE IF NOT EXISTS my_keyspace WITH replication = {'class': 'NetworkTopologyStrategy', 'web1': 3};"

# 创建Table(按需修改表结构)
cqlsh scyllaDB-node1 -e "CREATE TABLE IF NOT EXISTS my_keyspace.my_table (
    id UUID PRIMARY KEY,
    name text,
    value int
);"

echo "Keyspace和Table创建完成"

给脚本添加执行权限:

chmod +x init-scylla.sh

步骤2:修改docker-compose.yml配置

添加一个单独的初始化服务,依赖所有ScyllaDB节点,执行上述脚本:

version: "3"

services:

  scyllaDB-node1:
    container_name: scyllaDB-node1
    image: scylladb/scylla:5.1.0
    restart: always
    command: --seeds=scyllaDB-node1,scyllaDB-node2 --smp 1 --memory 750M --overprovisioned 1 --api-address 0.0.0.0
    networks:
      web1:

  scyllaDB-node2:
    container_name: scyllaDB-node2
    image: scylladb/scylla:5.1.0
    restart: always
    command: --seeds=scyllaDB-node1,scyllaDB-node2 --smp 1 --memory 750M --overprovisioned 1 --api-address 0.0.0.0
    networks:
      web1:
    depends_on:
      - scyllaDB-node1

  scyllaDB-node3:
    container_name: scyllaDB-node3
    image: scylladb/scylla:5.1.0
    restart: always
    command: --seeds=scyllaDB-node1,scyllaDB-node2 --smp 1 --memory 750M --overprovisioned 1 --api-address 0.0.0.0
    networks:
      web1:
    depends_on:
      - scyllaDB-node1
      - scyllaDB-node2

  # 新增初始化服务
  scylla-init:
    container_name: scylla-init
    image: scylladb/scylla:5.1.0
    networks:
      web1:
    depends_on:
      - scyllaDB-node1
      - scyllaDB-node2
      - scyllaDB-node3
    volumes:
      - ./init-scylla.sh:/init-scylla.sh
    command: ["bash", "/init-scylla.sh"]
    restart: "no" # 执行完成后自动退出,无需重启

networks:
  web1:
    driver: bridge

关键说明

  • 复制策略:脚本中NetworkTopologyStrategy的web1是你的Docker网络名称,3对应集群节点数,需根据实际情况调整。
  • 就绪检测:脚本中的循环等待确保只有当ScyllaDB节点真正可连接时才执行创建命令,避免因容器启动但服务未就绪导致的失败。
  • 初始化服务:设置restart: no保证脚本仅执行一次,完成后容器自动退出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:55:27