Hier ist meine docker-compose.yaml
:Populate cassandra nach Docker-compose beendet
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
Und ein Shell-Skript bootstrap.sh
zu starten:
#!/bin/bash
set -e
docker-compose -f $PWD/docker-compose.yaml down
docker-compose -f $PWD/docker-compose.yaml up -d
Dies funktioniert und feuert auf den Stapel. Nun möchte Ich mag einen Schlüsselraum zu Cassandra, aber hinzufügen, unterhalb dieser Linie einen Fehler wirft:
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;"'
Connection error: ('Unable to connect to any servers', {'172.18.0.2': error(111, "Tried connecting to [('172.18.0.2', 9042)]. Last error: Connection refused")})
Cassandra hat wahrscheinlich noch nicht initialisiert. Was ist ein guter Ansatz dafür?
Danke, tat es der Trick. Statt 30 Sekunden zu warten, ist es möglich, es ereignisbasiert zu machen? Wir haben keine Garantie, dass Cassandra nach 30 Sekunden bereit ist - es ist nur eine Annahme (wenn auch eine gute). – ChrisRich
Ich habe meine Antwort aktualisiert, indem ich "sleep" durch eine "bis loop" ersetzt habe, die es mit jeder Bootdauer arbeiten lässt. – haradwaith