根据@ jan-oudrincky和@ alexander-morozov的回答,我建立了一个新的码头图像,其中包含原始docker-entrypoint.sh
的包装,以便在设置环境变量CASSANDRA_KEYSPACE
时创建密钥空间。它在开发/测试环境中很有用。
它不会修改docker-entrypoint.sh
所以即使cassandra基本映像有任何修改,您只需要重建。
Dockerfile
FROM cassandra
COPY entrypoint-wrap.sh /entrypoint-wrap.sh
ENTRYPOINT ["/entrypoint-wrap.sh"]
CMD ["cassandra", "-f"]
entrypoint-wrap.sh
#!/bin/bash
if [[ ! -z "$CASSANDRA_KEYSPACE" && $1 = 'cassandra' ]]; then
# Create default keyspace for single node cluster
CQL="CREATE KEYSPACE $CASSANDRA_KEYSPACE WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 1};"
until echo $CQL | cqlsh; do
echo "cqlsh: Cassandra is unavailable - retry later"
sleep 2
done &
fi
exec /docker-entrypoint.sh "[email protected]"
我结束了在构建阶段复制迁移脚本并运行它作为CMD的一部分,这样'CMD migration.sh && cassandra -f',顺便说一下,这个迁移脚本作为后台任务运行,并等待一段时间,直到cassandra启动。 – jossemarGT