【问题标题】:Cassandra with docker-compose : how to create keyspace at runCassandra 与 docker-compose:如何在运行时创建密钥空间
【发布时间】:2022-07-22 00:42:05
【问题描述】:

我有一个在容器中运行的 golang 服务,以及一个 cassandra db。 这是这样运行的:

services:
  cassandra:
    image: cassandra:4.0
      ...    
      healthcheck:
      test: ["CMD-SHELL", "[ $$(nodetool statusgossip) = running ]"]
      interval: 30s
      timeout: 10s
      retries: 5

  my_service:
    ...
    command: ./my_service
    depends_on:
      cassandra:
        condition: service_healthy
    environment:
      ...


使用这样的 dockerfile

# syntax = docker/dockerfile:experimental

FROM ...

COPY ./bin/reply-by-email .
ENTRYPOINT ["./my_service"]


在代码中,我在指定手动创建的keyspace 时连接到数据库。 但是当我执行docker-compose up

时,我需要自动创建键空间

您知道如何执行此操作吗?

【问题讨论】:

    标签: docker docker-compose cassandra cql


    【解决方案1】:

    我是这样做的:

    1. Bash 脚本init.sh:
    #!/usr/bin/env bash
    
    until printf "" 2>>/dev/null >>/dev/tcp/cassandra/9042; do 
        sleep 5;
        echo "Waiting for cassandra...";
    done
    
    echo "Creating keyspace and table..."
    cqlsh cassandra -u cassandra -p cassandra -e "CREATE KEYSPACE IF NOT EXISTS test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'};"
    cqlsh cassandra -u cassandra -p cassandra -e "CREATE TABLE IF NOT EXISTS test.test (sensor_id uuid, registered_at timestamp, temperature int, PRIMARY KEY ((sensor_id), registered_at));"
    
    1. docker-compose.yaml 中的一个 init 容器
      init:
        image: cassandra:4
        depends_on:
          - cassandra
        restart: "no"
        entrypoint: ["/init.sh"]
        volumes:
          - ./init.sh:/init.sh
    

    它作为一个魅力,如果你需要真正的代码,完整的实现是here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 2016-12-22
      • 2015-11-02
      • 1970-01-01
      • 2017-07-24
      • 2017-03-24
      • 1970-01-01
      相关资源
      最近更新 更多