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

Docker化Cassandra 4.x自动创建键空间与表失败,求解决方案

解决Cassandra 4.x Docker镜像自动创建键空间和表的问题

问题根源

Cassandra 4.x官方Docker镜像的入口脚本路径发生了变更:3.x版本的入口脚本位于/docker-entrypoint.sh,而4.x版本已迁移至/usr/local/bin/docker-entrypoint.sh,这就是执行exec /docker-entrypoint.sh时提示文件不存在的直接原因。

方案一:调整自定义入口脚本路径

直接修改自定义脚本中的入口路径,并确保脚本拥有可执行权限:

修改后的custom-docker-entrypoint.sh

#!/bin/bash

CQL="
CREATE KEYSPACE testkeyspace WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 1};
CREATE TABLE IF NOT EXISTS testkeyspace.video(userid text, videoid text, title TEXT, creationdate TIMESTAMP, PRIMARY KEY (userid, videoid));
"

until echo "$CQL" | cqlsh; do
  echo "cqlsh: Cassandra is unavailable - retry later"
  sleep 2
done &

exec /usr/local/bin/docker-entrypoint.sh "$@"

修改后的Dockerfile

FROM cassandra:4.1.0

COPY custom-docker-entrypoint.sh /custom-docker-entrypoint.sh
RUN chmod +x /custom-docker-entrypoint.sh
ENTRYPOINT ["/custom-docker-entrypoint.sh"]
CMD ["cassandra", "-f"]

方案二:利用官方镜像的初始化机制(更推荐)

Cassandra 4.x官方镜像原生支持初始化脚本:将.cql或.sh格式的初始化文件放入/docker-entrypoint-initdb.d/目录,容器启动时会自动等待Cassandra服务就绪,然后执行目录内的脚本,无需手动处理重试逻辑:

1. 创建初始化CQL文件init.cql

CREATE KEYSPACE testkeyspace WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 1};
CREATE TABLE IF NOT EXISTS testkeyspace.video(userid text, videoid text, title TEXT, creationdate TIMESTAMP, PRIMARY KEY (userid, videoid));

2. 编写Dockerfile

FROM cassandra:4.1.0

COPY init.cql /docker-entrypoint-initdb.d/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:53:17