gpt4 book ai didi

java - 无法连接到基于 Docker 的 Cassandra 容器 - "All host(s) tried for query failed"

转载 作者:行者123 更新时间:2023-12-01 16:52:22 25 4
gpt4 key购买 nike

我正在尝试创建一个简单的 Java 应用程序,该应用程序可以连接到在本地计算机上运行的 Docker 容器内运行的 Cassandra。对于我的一生,我无法让它连接到容器!

我正在像这样启动我的容器。

docker run -p 9042:9042 cassandra:latest

我的 Java 代码不是很花哨..

   private Cluster cluster;
private Session session;
String serverIP = "localhost";

String username = "cassandra";
String password = "cassandra";
String keyspace = "DefaultKeyspace";
public static void main(String[] args) {
CassandraTest cassandraTest = new CassandraTest();
cassandraTest.connect("localhost");
}

public void connect(String node) {

try {
String username = "cassandra";
String password = "cassandra";
String keyspace = "DefaultKeyspace";

cluster = Cluster.builder()
.addContactPoints(serverIP).withCredentials(username.trim(), password.trim())
.build();

session = cluster.connect(keyspace);

// createSchema();
Metadata metadata = cluster.getMetadata();
System.out.println("Connected to cluster:" + metadata.getClusterName());
for (Host host : metadata.getAllHosts()) {
System.out.println("Datatacenter: " + host.getDatacenter()
+ "; Host: " + host.getAddress() + "; Rack: "
+ host.getRack());
}
} catch (Exception e) {

e.printStackTrace();
}
getSession();
createSchema();
}

但不管我做什么,我总是收到这个..

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/127.0.0.1:9042 (com.datastax.driver.core.exceptions.InvalidQueryException: unconfigured table schema_keyspaces))
at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:220)
at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:78)
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1231)
at com.datastax.driver.core.Cluster.init(Cluster.java:158)
at com.datastax.driver.core.Cluster.connect(Cluster.java:246)
at com.datastax.driver.core.Cluster.connect(Cluster.java:279)
at CassandraTest.connect(CassandraTest.java:37)
at CassandraTest.main(CassandraTest.java:27)
Exception in thread "main" java.lang.IllegalStateException: Can't use this Cluster instance because it was previously closed
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1213)
at com.datastax.driver.core.Cluster.init(Cluster.java:158)
at com.datastax.driver.core.Cluster.connect(Cluster.java:246)
at CassandraTest.getSession(CassandraTest.java:56)
at CassandraTest.connect(CassandraTest.java:51)
at CassandraTest.main(CassandraTest.java:27)

我也尝试过使用 docker 主机 IP。我该如何连接?

最佳答案

您需要使用 docker-machine 的 IP 地址作为 cassandra 主机。如果 cassandra 已恢复正常,您应该能够使用 docker-machine IP 地址对其进行 cqlsh。

$ docker-machine ip
123.456.78.99
$ export CQLSH_HOST=123.456.78.99
$ cqlsh -u cassandra

Password:
Connected to Test Cluster at 123.456.78.99:9042.
[cqlsh 5.0.1 | Cassandra 3.11.6 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cassandra@cqlsh>

因此,在您的代码中,不要使用 localhost,而是尝试使用 docker-machine ip

关于java - 无法连接到基于 Docker 的 Cassandra 容器 - "All host(s) tried for query failed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61663002/

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