创建ScyllaDB容器时无法创建Keyspace与表的问题求助
问题原因
- 你将纯CQL语句的文件当作Shell脚本执行,Shell无法识别CQL命令,因此出现
CREATE: command not found类报错。 - 用
entrypoint: ["/my_schema.sh"]覆盖了Scylla容器的默认启动入口,导致容器未启动Scylla数据库服务,脚本执行失败后容器直接退出,配合restart: always配置,容器进入反复重启循环。
解决方案
提供两种可行方案,按需选择:
方案一:直接挂载CQL文件到Scylla初始化目录
Scylla官方镜像内置了初始化逻辑,会自动执行/docker-entrypoint-initdb.d/目录下的.cql文件,且会等待数据库服务就绪后再执行:
- 将你的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 );
- 修改
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:
- 创建
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."
- 给脚本添加执行权限:
chmod +x my_init.sh
- 修改
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
相关产品推荐
相关产品推荐

