2017-02-20 49 views
1

我对于Docker玩起来相当新颖,所以希望这都是我的错,但我正在尝试使用Docker Compose获得多主机Apache Cassandra戒指设置。Multi host cassandra Docker-compose文件问题

我有以下搬运工-compose.yml文件

version: '2' 

services: 

    cassandra-1: 
     hostname: cassandra-1 
     image: cassandra:latest 
     command: /bin/bash -c "sleep 1 && echo ' -- Pausing to let system catch up ... -->' && /docker-entrypoint.sh cassandra -f" 
     expose: 
     - 7000 
     - 7001 
     - 7199 
     - 9042 
     - 9160 
     # volumes: # uncomment if you desire mounts, also uncomment cluster.sh 
     # - ./data/cassandra-1:/var/lib/cassandra:rw 

    cassandra-2: 
     hostname: cassandra-2 
     image: cassandra:latest 
     command: /bin/bash -c "sleep 20 && echo ' -- Pausing to let system catch up ... -->' && /docker-entrypoint.sh cassandra -f" 
     environment: 
     - CASSANDRA_SEEDS=cassandra-1 
     links: 
     - cassandra-1:cassandra-1 
     expose: 
     - 7000 
     - 7001 
     - 7199 
     - 9042 
     - 9160 
     # volumes: # uncomment if you desire mounts, also uncomment cluster.sh 
     # - ./data/cassandra-2:/var/lib/cassandra:rw 

本示例试图在另一容器中,开始第一卡桑德拉节点(卡桑德拉-1),然后一个第二节点(卡桑德拉-2)这应该是能够使用1节点作为标准卡桑德拉环境变量种子节点“CASSANDRA_SEEDS”

然而,当我运行它,我得到这种异常

cassandra-2_1 | WARN 07:00:35 Seed provider couldn't lookup host cassandra-1 
cassandra-2_1 | Exception (org.apache.cassandra.exceptions.ConfigurationException) encountered during startup: The 
provider lists no seeds. 
cassandra-2_1 | The seed provider lists no seeds. 
cassandra-2_1 | ERROR 07:00:35 Exception encountered during startup: The seed provider lists no seeds. 
cass2_cassandra-2_1 exited with code 3 

从哪里开始第二卡桑德拉节点(卡桑德拉-2)的尝试总是失败,同时也结束了在第一

cass1_cassandra-1_1 exited with code 137 

杀死如果我的泊坞窗,compose.yaml文件分割成两个部分,第一个cassandra节点的起始位置在一个文件中。并且只需使用码头工具启动该节点即可构成即可。

也请注意,当我拿2个独立泊坞窗,compose.yml文件路径,一为“卡桑德拉-1”,另一个是“卡桑德拉-2”我AM确保2号文件使用“external_links”而不是“链接”。但结果是一样的

任何人都有更多的码头经验告诉我,我哪里出错了。

我已经在网上搜索了其他的例子,每个人似乎都和我一样。但我的行不通。

感觉完全迷失了方向,请大家帮忙

回答

1

这似乎只是Docker for Windows的一个问题。我试图在Mac上的原始文件,它工作得很好

1

你确定第一个节点完成启动第二个节点试图加入群集之前?

根据我的经验,第一个节点完成启动仅需20秒。在加入群集之前,使第二个节点休眠60秒。

command: /bin/bash -c "echo ' -- Pausing to let system catch up ...' && sleep 60 && /docker-entrypoint.sh cassandra -f" 

此外,在上述命令我换echosleep这使得更多的意义,因为你仔细观看端子输出。的cassandra-1

日志应该由你的终端上执行该命令显示类似

INFO 21:21:06 Node /172.18.0.2 state jump to NORMAL 
INFO 21:23:04 Handshaking version with /172.18.0.4 
INFO 21:23:07 Node /172.18.0.4 is now part of the cluster 
INFO 21:23:07 InetAddress /172.18.0.4 is now UP 

非常集装箱日志:

docker logs [OPTIONS] CONTAINER_ID 

通过执行docker ps查找容器ID。

如果仍然无法正常工作,请尝试将mem_limit: 1024m添加到两个Cassandra容器定义中。由于内存资源有限,启动可能会失败。

+0

可悲的是它没有任何区别。同样的错误。我在Windows上运行Docker,我将这个文件交给了docker的Linux用户,他们说这只是工作。 GRRRR – sacha