在Docker-compose完成之后填充cassandra
这是我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)]最后一个错误:连接被拒绝”)})
卡桑德拉可能还没有初始化。 这是什么方法?
如果尝试在启动容器后在bootstrap.sh
脚本中执行Cassandra中的命令,则Cassandra服务器将没有时间启动。
一个简单的解决scheme是在执行命令之前,在脚本中等待几秒钟,使用until循环 :
#!/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
- 在LXC或Docker中运行Cassandra是否是一个好主意?
- Docker容器A在作为另一个Docker服务B运行的cassandra中查询(插入/更新)之后死亡
- 当启用JMXauthentication时,Datastax Opscenter是否需要重新启动?
- 在Docker中设置cassandra驱动程序(python)
- 如何更改cassandra dockerconfiguration
- 如何在cassandra的docker实例中启用用户定义的函数?
- 如何通过Docker Image将Elassandra集成到我的Jhipster应用程序中?
- Cassandra sstableloader,没有数据恢复
- 使用Docker填充Cassandra Db