gpt4 book ai didi

Java 连接到在 docker 中运行的 cassandra

转载 作者:行者123 更新时间:2023-11-30 10:28:28 24 4
gpt4 key购买 nike

我是 cassandra 的新手,和 docker 一样。我的目标是从 java 连接到在 docker 中运行的 cassandra。我在 Windows 机器上工作

我通过执行来运行 cassandra(也尝试了 ver 2.2、3.10 并且没有任何 env.variables)

docker run --name cassandra -d -e CASSANDRA_RPC_ADDRESS=127.0.0.1 cassandra:3.0

目前我有这样的 docker 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

我可以用这样的输出“docker exec -it cassandra 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'

我的测试代码(也尝试过不指定任何协议(protocol)版本,并尝试使用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:

根据 dock I found,我刚刚尝试使用 -P 选项运行

现在 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))

最佳答案

如果您想使用默认端口连接到本地主机,您需要转发它。

docker run --name cassandra -d \
-p 9042:9042 \
cassandra:3.0

使用 -P 将根据 Dockerfile 的 EXPOSE 选项为您选择随机端口。

关于Java 连接到在 docker 中运行的 cassandra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44603617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com