所以我需要创建一个具有键空间的cassandra Docker镜像。所以我做了这个docker文件
FROM cassandra
WORKDIR /usr/app
COPY script.cql ./script.cql
COPY entrypoint-wrap.sh ./entrypoint-wrap.sh
CMD ["cassandra", "-f"]
RUN bash entrypoint-wrap.sh
和script.cql包含
CREATE KEYSPACE project WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};
我想运行此脚本
#!/bin/bash
echo "checkcqlsh"
program=no
while [ $program = no ]
do
if ! [ -x "$(command -v cqlsh)" ]; then
echo 'Error: cqlsh is not included.'
program=no
else
program=yes
cqlsh -f script.cql
fi
done
但是当它检查if
条件时,由于DB尚未启动的错误,图像构建停止了。如何检查cassandra数据库是否已启动并正在运行?
答案 0 :(得分:0)
先设置CMD
然后再RUN
,因为它们是在不同的生命周期执行的,因此将不起作用。
一种方法是拥有一个自定义入口点,该入口点将在后台启动Cassandra,等待其在线,应用模式更改,然后无限期等待,或者直到SIGTERM
(等待信号更好,因为它可以清楚地关闭Cassandra)。
另一种方法-在构建期间预先初始化容器,如下所示:
RUN
在后台启动Cassandra 然后,正常的cassandra -f
将作为CMD
命令。
is available in the DataStax's JIRA for Java driver这样的示例,并链接到包含Dockerfile +脚本的要点。