2017-06-17 4 views
1

Ich bin neu in Cassandra, genau wie Docker. Mein Ziel ist es, eine Verbindung zu Cassandra im Docker von Java zu starten. Ich arbeite an Windows-RechnerJava verbindet zu Cassadra läuft innerhalb Docker

I cassandra lief durch die Ausführung (auch versucht, Version 2.2, 3.10 und ohne env.variables)

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

Zur Zeit habe ich so Docker ps Ausgabe:

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 

Und ich kann mit einem solchen Ausgang

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] 

In Java-Projekt "exec -es cassandra cqlsh Andockfenster" i gradle Abhängigkeit

compile group: 'com.datastax.cassandra', name: 'cassandra-driver-core', version: '3.2.0' 

Mein Testcode haben (auch versucht, ohne eine Protokollversion zu spezifizieren und versucht, mit V5)

public static void main(String[] args) 
{ 
    Cluster cluster = Cluster.builder() 
          .addContactPoint("127.0.0.1") 
          .withProtocolVersion(ProtocolVersion.V4) 
          .build(); 
    Session session = cluster.connect(); 
} 

und ich bekomme diese Ausnahme:

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) 

Irgendwelche Ideen i Machst du falsch?

Edit 1:

`ve gerade versucht Lauf mit Option -P, nach dock i found

Jetzt ps Ausgabe lautet:

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 

Ich änderte den Code zu

Cluster cluster = Cluster.builder() 
          .addContactPoint("127.0.0.1") 
          .withPort(32769) 
          .withProtocolVersion(ProtocolVersion.V4) 
          .build(); 

Ausnahme geändert in

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)) 
+0

Ich denke, Sie sollten Portweiterleitung in Ihrem Docker-Rechner angeben. Versuchen Sie, sich nicht mit localhost, sondern mit der Docker-IP-Adresse zu verbinden. h. 192.168.99.100, wenn es funktionieren würde, bedeutet dies, dass das Problem in der Portweiterleitung liegt. –

+0

Meinten Sie Containeradresse? "docker inspect cassandra" enthält keine Containeradresse. Wie kann ich die "Docker IP" herausfinden? – iteracia

+0

Beispiel: "docker machine ip default", wenn Sie docker machine verwenden https://docs.docker.com/machine/reference/ip/ –

Antwort

0

Wenn Sie möchten, eine Verbindung mit dem Standard-Port auf localhost, müssen Sie es zu übermitteln.

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

-P Verwendung wird für Sie auf der Grundlage der EXPOSE Optionen der Dockerfile zufälligen Ports auszuwählen.

0

Dank Rober. Die Antwort lautet

docker run --name cassandra -P -d cassandra:3.0 

Und dann verbinden mit Port in Docker ps angezeigt (32769 für mich).