我想知道是否有人尝试使用默认键空间构建cassandra docker镜像,但我尝试在BUILD时间内完成该操作,但由于cassandra不在该阶段运行,因此无法正常工作。这类似于以下内容:
FROM cassandra:2.0 COPY ../somewhere/keyspace_definition.txt /src/keyspace_definition.txt RUN /usr/bin/cqlsh -f /src/keyspace_definition.txt
我的新方法是从入口点脚本执行此操作,但是,如果其他人有更好的主意,我现在想。
快乐运输:D
今天解决了这个问题。构建映像,该映像将docker-entrypoint.sh在修改之前附加一个修改过的默认Cassandraexec "$@"
docker-entrypoint.sh
exec "$@"
for f in docker-entrypoint-initdb.d/*; do case "$f" in *.sh) echo "$0: running $f"; . "$f" ;; *.cql) echo "$0: running $f" && until cqlsh -f "$f"; do >&2 echo "Cassandra is unavailable - sleeping"; sleep 2; done & ;; *) echo "$0: ignoring $f" ;; esac echo done
将所需的* .cql放在中的图像中docker-entrypoint-initdb.d/。
docker-entrypoint-initdb.d/
映像将启动,启动cassandra,然后重试插入数据库,除非成功执行。只要确保您的脚本是IF NOT EXISTS否则脚本将无限期运行。
IF NOT EXISTS