Cassandra节点不在Docker中链接

我正在看一个关于Cassandra的PluralSight的旧video,并将其与下面的方法联系起来。 但是,它不适用于当前的docker版本。 这是我如何链接不同的节点。 例如:

docker run --name=n1 -d tobert/cassandra docker run --name n2 -d tobert/cassandra -seeds 172.17.0.7 

运行命令时,IP地址是172.17.0.7

 docker inspect -f '{{ .NetworkSettings.IPAddress}}' n1 

但是,似乎只允许一个节点一次运行。 当我运行命令

 docker ps 

要么

 docker exec -it n1 nodetool status 

只有一个容器正在运行。 当我尝试检查容器的IP地址时,它将返回空。 有没有另外一种方法来连接docker中的cassandra节点?

pipe理解决这个问题。 Docker快速入门terminal创build的泊坞窗机器似乎是个问题。 也许与1024的默认内存有关?

重新创build机器为我解决了它

 docker-machine rm default docker-machine create -d virtualbox --virtualbox-memory=4096 default 

是的,Dashu是正确的,你需要比默认的内存多运行多个Cassandra实例。 看到类似的Twitter线程在这里: https : //twitter.com/perksc/status/641159044225466368 。

-seeds参数是特定于此Cassandra docker容器的入口点,并有助于Cassandra自己的聚类(请参阅Github项目: https : //github.com/tobert/cassandra-docker )。 有了这个特性,你不需要使用Docker自己的容器链接来build立一个集群。

(我是Pluralsight课程的作者,有趣的是课程还不到一年,但是从那以后,Docker已经发生了很大的变化!)

您可以链接泊坞窗容器与 – 链接标志:

 docker run --name n1 tobert/cassandra docker run --name n2 --link n1:cassandra tobert/cassandra -seeds cassandra 

从docker文档跨链接的通信包含详细的解释如何使用 – 链接标志。


我也运行你的命令,它在我的机器上工作。

以下是命令的输出: docker exec -it n1 nodetool status

 Datacenter: datacenter1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 172.17.0.3 72 KB 256 100.0% f0a34a45-5f7a-46ff-8fe6-1cf5ff36a3e3 rack1 UN 172.17.0.2 51.46 KB 256 100.0% 8036177e-515c-42b1-9263-3b815c25bde6 rack1 

另外,当-seed参数错误(不存在ip地址)时,第二个容器正在等待一段时间,在~30s之后终止,

 ERROR [main] 2016-02-07 19:12:11,081 CassandraDaemon.java:541 - Exception encountered during startup java.lang.RuntimeException: Unable to gossip with any seeds at org.apache.cassandra.gms.Gossiper.doShadowRound(Gossiper.java:1307) ~[apache-cassandra-2.1.7.jar:2.1.7] at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:533) ~[apache-cassandra-2.1.7.jar:2.1.7] 

所以我认为n2不能访问n1 – 请仔细检查你的n1 ip地址(检查你的docker exec xxxx tail -f /data/log/system.log -n 100 ,其中xxxx – n2 container id )。

如果您对Cassandra版本没有任何特殊要求,则还可以从官方存储库中检查图像: https : //hub.docker.com/_/cassandra/ 。