所以我需要创建一个带有keyspace的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数据库是否正常运行?
1条答案
按热度按时间4szc88ey1#
有
CMD
然后RUN
不会工作,因为它们在不同的生命周期执行。一种方法是有一个自定义入口点,它将在后台启动cassandra,等待它联机,应用模式更改,然后无限期地等待,或者直到
SIGTERM
(等待信号更好,因为它可以让Cassandra清楚地关机)。另一种方法-在构建时预初始化容器,类似于:
从Cassandra的背景开始
RUN
等待它启动,然后应用架构更改终止cassandra
那就正常了
cassandra -f
将作为CMD
命令。datastax的jiraforjava驱动程序中提供了这样一个例子,并且链接到一个包含dockerfile+脚本的gist。