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
相关产品推荐
相关产品推荐

