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

创建ScyllaDB容器时无法创建Keyspace与表的问题求助

问题原因
  1. 你将纯CQL语句的文件当作Shell脚本执行,Shell无法识别CQL命令,因此出现CREATE: command not found类报错。
  2. 用entrypoint: ["/my_schema.sh"]覆盖了Scylla容器的默认启动入口,导致容器未启动Scylla数据库服务,脚本执行失败后容器直接退出,配合restart: always配置,容器进入反复重启循环。
解决方案

提供两种可行方案,按需选择:

方案一:直接挂载CQL文件到Scylla初始化目录

Scylla官方镜像内置了初始化逻辑,会自动执行/docker-entrypoint-initdb.d/目录下的.cql文件,且会等待数据库服务就绪后再执行:

  1. 将你的CQL内容保存为my_schema.cql(内容和你原脚本一致):
CREATE KEYSPACE IF NOT EXISTS books_keyspace WITH replication = 
{'class':'SimpleStrategy','replication_factor':'1'};

CREATE TABLE IF NOT EXISTS books_keyspace.books
(
book_id int PRIMARY KEY, 
book_name text, 
genre text, 
price double, 
issue_date text, 
return_date text, 
fine double
);
  1. 修改docker-compose.yaml,移除自定义entrypoint,挂载CQL文件到指定目录:
version: "3"

services:
  scyllaDB-node1:
    container_name: scyllaDB-node1
    image: scylladb/scylla:5.1.0
    restart: always
    command: --smp 1 --memory 750M --overprovisioned 1 --api-address 0.0.0.0
    volumes:
      - ./my_schema.cql:/docker-entrypoint-initdb.d/my_schema.cql

方案二:使用Shell脚本实现灵活初始化(适合多步骤操作)

如果需要添加更多初始化逻辑,可以编写Shell脚本等待服务就绪后执行CQL:

  1. 创建my_init.sh脚本:
#!/bin/bash
set -e

# 等待Scylla服务就绪
echo "Waiting for Scylla to become available..."
until cqlsh -e "SELECT cluster_name FROM system.local" > /dev/null 2>&1; do
  sleep 2
done

# 执行CQL语句
echo "Initializing schema..."
cqlsh -e "CREATE KEYSPACE IF NOT EXISTS books_keyspace WITH replication = {'class':'SimpleStrategy','replication_factor':'1'};"
cqlsh -e "CREATE TABLE IF NOT EXISTS books_keyspace.books (book_id int PRIMARY KEY, book_name text, genre text, price double, issue_date text, return_date text, fine double);"

echo "Schema initialization done."
  1. 给脚本添加执行权限:
chmod +x my_init.sh
  1. 修改docker-compose.yaml,挂载脚本到初始化目录:
version: "3"

services:
  scyllaDB-node1:
    container_name: scyllaDB-node1
    image: scylladb/scylla:5.1.0
    restart: always
    command: --smp 1 --memory 750M --overprovisioned 1 --api-address 0.0.0.0
    volumes:
      - ./my_init.sh:/docker-entrypoint-initdb.d/my_init.sh
验证步骤

启动容器后等待1-2分钟让初始化完成,执行以下命令验证:

docker exec -it scyllaDB-node1 cqlsh -e "DESCRIBE TABLE books_keyspace.books"

若能正常输出表结构,说明初始化成功。

内容的提问来源于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 10:27:59