如何在Cassandra DB dockerfile上执行运行状况检查

时间:2020-06-03 15:45:21

标签: bash docker cassandra

所以我需要创建一个具有键空间的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 个答案:

答案 0 :(得分:0)

先设置CMD然后再RUN,因为它们是在不同的生命周期执行的,因此将不起作用。

一种方法是拥有一个自定义入口点,该入口点将在后台启动Cassandra,等待其在线,应用模式更改,然后无限期等待,或者直到SIGTERM(等待信号更好,因为它可以清楚地关闭Cassandra)。

另一种方法-在构建期间预先初始化容器,如下所示:

  1. 使用RUN在后​​台启动Cassandra
  2. 等待它开始,并应用模式更改
  3. 终结Cassandra

然后,正常的cassandra -f将作为CMD命令。

is available in the DataStax's JIRA for Java driver这样的示例,并链接到包含Dockerfile +脚本的要点。