$ until $(docker exec cassandra-node-1 nodetool status | grep "UN" > /dev/null); do echo "Waiting for cassandra-node-1"; sleep 1; done;
Error response from daemon: Container 42103912deea0329e5a2e73eda7a7a157f757598a58dc79e9ec9972ae95ec7a8 is not running
Error response from daemon: Container 42103912deea0329e5a2e73eda7a7a157f757598a58dc79e9ec9972ae95ec7a8 is not running
Error response from daemon: Container 42103912deea0329e5a2e73eda7a7a157f757598a58dc79e9ec9972ae95ec7a8 is not running
Waiting for cassandra-node-1
Waiting for cassandra-node-1
$
2条答案
按热度按时间q5iwbnjs1#
首先,您需要等待另一个端口:9042。这是CQLSH使用的端口。
另一种方法也可以等待执行
cqlsh
而不是nc
(或者作为第二步,因为nc
执行起来要快得多)。例如,您可以使用以下命令:等到 cassandra 准备好
9jyewag02#
您可以使用shell命令在Docker容器上轮询
nodetool status
,并等待节点标记为UN
。例如,假设您在Docker容器中只有1个Cassandra节点,并且它被命名为
cassandra-node-1
(使用docker run --name
设置),如果cassandra-node-1
已经可用,则nodetool status
的输出为:其中
UN
表示节点是Up
和Normal
。然后一个
until
bash循环可以是:这里我们用
grep
来表示一个UN
字符串。如果没有匹配的字符串,grep
将返回一个非零的退出代码,而until
将在条件为false-y时继续循环。(如果您有多个节点,则需要更好地检查所有节点是否都是UN
。这只是1个节点的情况的示例。)示例输出为:
其中,一旦节点为
UN
,则until
循环退出。您也可以尝试使用其他
nodetool
命令,如info
和describecluster
:https://cassandra.apache.org/doc/latest/cassandra/tools/nodetool/nodetool.html