我正在学习cassandra 2.1.1:
我有一个运行cassandra节点的docker容器。我能够从节点内csqlsh到cassandra节点本身。它说" 127.0.0.1:4096"。我知道它是localhost并且与#34; listen_address"有关。在cassandra.yml设置中。
使用boot2docker ip地址时,它不起作用。我用-p端口4096& 9160但没有运气。我试图改变" listen_address"到boot2docker的ip地址,但是当cqlsh
时出现同样的错误信息:
1. cqlsh客户端和cassandra节点正在运行cassandra 2.1.1
2.我已经通过运行./cassandra
有什么建议吗?
由于
答案 0 :(得分:1)
发生在我身上,能够在容器内cqlsh,但无法从docker容器主机外部连接,当我意识到使用不使用9160的v2.1时:
所以,你应该让clqsh客户端在9042而不是9106使用包含docker容器的主机的IP。使用docker ps和netstat -atun | grep LIST和telnet确认正确的端口处于LISTEN状态。
docker run -d -p 9042:9042 cassandra:2.2
docker run -d -p 9042:9042 poklet/cassandra
<强>要求强>
在Cassandra 2.1中,cqlsh实用程序使用本机协议。在使用Datastax python驱动程序的Cassandra 2.1中,默认的cqlsh监听端口是9042。
在Cassandra 2.0中,cqlsh实用程序使用Thrift传输。在 Cassandra 2.0.x,默认的cqlsh监听端口是9160。
答案 1 :(得分:0)
您应该将listen_address设置为分配给容器的IP地址。您可以使用&#39; boot2docker inspect&#39;对着容器。
通常,容器的IP地址将位于boot2docker建立的专用网络上,因此无法在boot2docker VM外部访问,除非您通过VM路由流量,如下所示:https://gist.github.com/bhyde/be920f1a390db5f4148e