我是cassandra的新手,与docker相同。我的目标是连接到在java中运行docker的cassandra。我工作在Windows机器上Java连接到在docker内部运行的cassadra
我通过执行跑卡桑德拉(也试过版本2.2,3.10,没有任何env.variables)
docker run --name cassandra -d -e CASSANDRA_RPC_ADDRESS=127.0.0.1 cassandra:3.0
目前,我有这样的搬运工ps的输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f932d3e7e0dc cassandra:3.0 "/docker-entrypoin..." 5 seconds ago Up 5 seconds 7000-7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp cassandra
,我可以“泊坞窗EXEC - 它卡桑德拉cqlsh”这样的输出
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.0.13 | CQL spec 3.4.0 | Native protocol v4]
在Java项目中我有gradle这个依赖
compile group: 'com.datastax.cassandra', name: 'cassandra-driver-core', version: '3.2.0'
我的测试代码(也试过不指定任何协议版本,并与V5尝试)
public static void main(String[] args)
{
Cluster cluster = Cluster.builder()
.addContactPoint("127.0.0.1")
.withProtocolVersion(ProtocolVersion.V4)
.build();
Session session = cluster.connect();
}
,我得到这个异常:
Exception in thread "main" com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /127.0.0.1:9042 (com.datastax.driver.core.exceptions.TransportException: [/127.0.0.1:9042] Cannot connect))
at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:232)
at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:79)
at com.datastax.driver.core.Cluster$Manager.negotiateProtocolVersionAndConnect(Cluster.java:1600)
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1518)
at com.datastax.driver.core.Cluster.init(Cluster.java:159)
at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:330)
at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:305)
at com.datastax.driver.core.Cluster.connect(Cluster.java:247)
at com.iter.cassandratest.Cassandratest.main(Cassandratest.java:17)
任何想法我做错了吗?
编辑1:
I`ve只是试图用-P选项来看,根据dock i found
现在ps的输出是:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9eb54421aac2 cassandra:3.0 "/docker-entrypoin..." 4 seconds ago Up 3 seconds 0.0.0.0:32772->7000/tcp, 0.0.0.0:32771->7001/tcp, 0.0.0.0:32770->7199/tcp, 0.0.0.0:32769->9042/tcp, 0.0.0.0:32768->9160/tcp cassandra
我改变代码
Cluster cluster = Cluster.builder()
.addContactPoint("127.0.0.1")
.withPort(32769)
.withProtocolVersion(ProtocolVersion.V4)
.build();
异常更改为
All host(s) tried for query failed (tried: /127.0.0.1:32769 (com.datastax.driver.core.exceptions.TransportException: [/127.0.0.1:32769]
Channel has been closed))
我想你应该在你的码头机器中指定端口转发。尝试连接到本地主机,但连接到码头IP。即192.168.99.100,如果它可以工作,那么它意味着问题在于端口转发。 –
你的意思是容器地址? “码头检查卡桑德拉”不包含容器的地址。我怎样才能找到“码头IP”? – iteracia
即“docker machine ip default”,如果您使用的是docker机器 https://docs.docker.com/machine/reference/ip/ –