【问题标题】:Populate cassandra after Docker-compose finishesDocker-compose 完成后填充 cassandra
【发布时间】:2017-11-22 14:48:54
【问题描述】:

这是我的docker-compose.yaml

version: '3'
services:
  cassandra:
    container_name: cassandra
    image: cassandra:3.10
    ports:
      - 9142:9042
    volumes:
      - $PWD/src/database/migrations:/migrations
    depends_on:
      - mysql
  mysql:
    image: mysql:5.7
    volumes:
      - ./src/database/migrations:/docker-entrypoint-initdb.d
    ports:
      - 3307:3306
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=leonardo
      - MYSQL_ALLOW_EMPTY_PASSWORD=1

还有一个 shell 脚本 bootstrap.sh 开始:

#!/bin/bash
set -e
docker-compose -f $PWD/docker-compose.yaml down
docker-compose -f $PWD/docker-compose.yaml up -d

这正在工作并启动堆栈。 现在我想向 Cassandra 添加一个键空间,但是,在此行下方会引发错误:

docker-compose -f $PWD/docker-compose.yaml exec cassandra /bin/sh -c $'cqlsh cassandra -e "CREATE KEYSPACE mykeyspace WITH replication = {\'class\': \'SimpleStrategy\', \'replication_factor\': \'1\'}  AND durable_writes = true;"'

连接错误:('无法连接到任何服务器',{'172.18.0.2': 错误(111,“尝试连接到[('172.18.0.2',9042)]。最后一个错误: 连接被拒绝")})

Cassandra 可能还没有初始化。 有什么好的方法呢?

【问题讨论】:

    标签: docker cassandra sh docker-compose


    【解决方案1】:

    如果您在启动容器后尝试在 bootstrap.sh 脚本中的 Cassandra 中执行命令,Cassandra 服务器将没有时间启动。

    一个简单的解决方案是在执行命令之前在脚本中等待几秒钟,使用 until loop:

    #!/bin/bash
    set -e
    docker-compose -f $PWD/docker-compose.yaml down
    docker-compose -f $PWD/docker-compose.yaml up -d
    until docker-compose -f $PWD/docker-compose.yaml exec cassandra /bin/sh -c "cqlsh cassandra -e 'show version'";
    do
      docker-compose -f $PWD/docker-compose.yaml exec cassandra /bin/sh -c $'cqlsh cassandra -e "CREATE KEYSPACE mykeyspace WITH replication = {\'class\': \'SimpleStrategy\', \'replication_factor\': \'1\'}  AND durable_writes = true;"'
    done
    

    【讨论】:

    • 谢谢,它成功了。与其等待 30 秒,不如让它基于事件?我们无法保证 Cassandra 在 30 秒后准备就绪 - 这只是一个假设(尽管是一个很好的假设)。
    • 我更新了我的答案,将“睡眠”替换为“直到循环”,使其适用于任何启动持续时间。
    猜你喜欢
    • 2022-06-15
    • 2019-06-03
    • 2022-08-04
    • 2021-01-11
    • 2017-04-15
    • 1970-01-01
    • 2014-09-12
    • 2022-10-22
    • 2016-02-08
    相关资源
    最近更新 更多