jos*_*rGT 14 docker cassandra-2.0 dockerhub
我想知道是否有人试图用默认键空间构建一个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
Run Code Online (Sandbox Code Playgroud)
我的新方法是从入口点脚本中做到这一点,但是,如果其他人有更好的想法,我现在想要.
发货快乐:D
ale*_*ung 10
根据@ jan-oudrincky和@ alexander-morozov的答案,我构建了一个新的docker镜像,它具有原始包装,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"]
Run Code Online (Sandbox Code Playgroud)
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 "$@"
Run Code Online (Sandbox Code Playgroud)
小智 7
今天解决了这个问题.构建映像,它覆盖默认的Cassandra 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
Run Code Online (Sandbox Code Playgroud)
将所需的*.cql放入图像中docker-entrypoint-initdb.d/.
图像将启动,启动cassandra,并重试插入数据库,除非成功.只要确保你的脚本是IF NOT EXISTS脚本将无限期运行.
| 归档时间: |
|
| 查看次数: |
6997 次 |
| 最近记录: |