2015-07-24 4 views
9

Ich versuche ein Docker-Image zu starten, das Cassandra ausführt. Ich muss Sparsamkeit verwenden, um mit Cassandra zu kommunizieren, aber es scheint, dass das standardmäßig deaktiviert ist. Auschecken der cassandra Protokolle zeigt:Aktivieren der Sparsamkeit in Cassandra Docker

INFO 21:10:35 Not starting RPC server as requested. 
    Use JMX (StorageService->startRPCServer()) or nodetool (enablethrift) to start it 

Meine Frage ist: Wie kann ich thrift aktivieren, wenn diese cassandra Behälter zu beginnen?

Ich habe versucht, verschiedene Umgebungsvariablen ohne Erfolg zu setzen:

docker run --name cs1 -d -e "start_rpc=true" cassandra 
docker run --name cs1 -d -e "CASSANDRA_START_RPC=true" cassandra 
docker run --name cs1 -d -e "enablethrift=true" cassandra 
+1

Offenbar thrift RPC-Server wurde seit Cassandra deaktiviert 2.2, müssen Sie start_rpc = true, nodetool enablethrift für neuere Versionen setzen, damit Kunden thrift verwenden können. https://issues.apache.org/jira/browse/CASSANDRA-9319 – kisna

Antwort

11

Ich habe das gleiche Problem mit dem Docker Cassandra Bild. Sie können meinen Andock-Container unter Github oder Docker hub anstelle des Standard-Cassandra-Abbilds verwenden.

Das Problem ist, dass die Datei cassandra.yaml start_rpc auf false festgelegt hat. Das müssen wir ändern. Dazu müssen wir die folgende Dockerfile verwenden können (das ist, was mein Bild der Fall ist):

FROM cassandra 
RUN sed -i 's/^start_rpc.*$/start_rpc: true/' /etc/cassandra/cassandra.yaml 
+1

DANKE! Ich hatte das gleiche Problem. Aber anstatt Ihre Gabelung zu benutzen (die wahrscheinlich aufgegeben wird :-(), führe ich einfach "docker exec -it cass1 sed -i's/^ start_rpc. * $/Start_rpc: true/'/ etc/cassandra/cassandra.yaml' nach dem Ausführen des offiziellen Containers. Das funktioniert auch! –

+0

@ h3nrik Antwort ist richtiger – alessiop86

2

Vergessen Sie nicht, den thrift-Client-API-Port mit dem run Befehl belichten zu können, um den Behälter für den Zugriff von außen wie:

docker run --name cs1 -d .... -p 9160:9160 cassandra 

Sie möchten vielleicht auch mehrere Ports belichten, wie für CQL Port 9042, Port 7199 für JMX, Port 7000 und 7001 für Querverkehr.

19

Die sed Abhilfe (und nachfolgende benutzerdefinierte Dockerfiles, die nur dieses Verhalten zu aktivieren) ist nicht mehr erforderlich.

Neuere official Docker containers unterstützt eine CASSANDRA_START_RPC Umgebungsvariable mit dem -e Flag. Zum Beispiel:

docker run --name cassandra1 -d -e CASSANDRA_START_RPC=true -p 9160:9160 -p 9042:9042 -p 7199:7199 -p 7001:7001 -p 7000:7000 cassandra 
+6

Dies ist die richtige Antwort – alessiop86