2015-07-24 10 views
9

Sto tentando di avviare un'immagine docker che esegue cassandra. Ho bisogno di usare parsimonia per comunicare con cassandra, ma sembra che sia disabilitato di default. Controllando i registri di Cassandra mostra:Abilita risparmio in Cassandra Docker

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

La mia domanda è: come posso abilitare parsimonia quando si inizia questo contenitore cassandra?

Ho cercato di impostare diverse variabili d'ambiente senza alcun risultato:

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

A quanto pare, la parsimonia server RPC è stato disattivato dal Cassandra 2.2, è necessario impostare start_rpc = true, nodetool enablethrift per le versioni più recenti in modo i clienti possono utilizzare la parsimonia. https://issues.apache.org/jira/browse/CASSANDRA-9319 – kisna

risposta

11

Ho riscontrato lo stesso problema con l'immagine di Docker Cassandra. È possibile utilizzare il contenitore docker su Github o su Docker hub anziché l'immagine Cassandra predefinita.

Il problema è che il file cassandra.yaml ha start_rpc impostato su false. Dobbiamo cambiarlo. Per fare questo possiamo usare la seguente Dockerfile (che è ciò che la mia immagine fa):

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

GRAZIE! Ho avuto lo stesso problema. Ma invece di usare la tua fork (che probabilmente alla fine sarà abbandonata :-(), sto semplicemente eseguendo 'docker exec -it cass1 sed -i'/^ start_rpc. * $/Start_rpc: true/'/ etc/cassandra/cassandra.yaml' dopo aver eseguito il contenitore ufficiale. Funziona anche! –

+0

@ h3nrik la risposta è più corretta – alessiop86

2

Non dimenticare di esporre il client API parsimonia con il comando run per essere in grado di accedere al contenitore dall'esterno come:

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

si potrebbe anche voler esporre più porte, come per la porta CQL 9042, la porta 7199 per JMX, porta 7000 e 7001 per la comunicazione trasversale.

19

Il sed soluzione alternativa (e successive Dockerfiles personalizzati che consentono solo questo comportamento) non è più necessario.

Newer official Docker containers supportare una variabile di ambiente CASSANDRA_START_RPC utilizzando il flag -e. Per esempio:

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

Questa è la risposta più corretta – alessiop86