Ho installato un contenitore elasticsearch con l'immagine mobile docking OFFICIAL REPO elasticsearch. Quindi eseguilo conImpossibile connettersi a elasticsearch Dockerized tramite java-client
docker run -dP elasticsearch
Facile e funzionante. Le informazioni ps è
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
658b49ed9551 elasticsearch:latest "/docker-entrypoint. 2 seconds ago Up 1 seconds 0.0.0.0:32769->9200/tcp, 0.0.0.0:32768->9300/tcp suspicious_albattani
E posso accedere al server con http-client tramite la porta 32769-> 9200
baihetekiMacBook-Pro:0 baihe$ curl 10.211.55.100:32769
{
"status" : 200,
"name" : "Scorpia",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "1.4.5",
"build_hash" : "2aaf797f2a571dcb779a3b61180afe8390ab61f9",
"build_timestamp" : "2015-04-27T08:06:06Z",
"build_snapshot" : false,
"lucene_version" : "4.10.4"
},
"tagline" : "You Know, for Search"
}
Ora ho bisogno del mio JAVA-programma per lavorare con l'elasticsearch dockerized. Il client nodo java può essere connesso solo a elasticsearch tramite 32768-> 9300 (la porta di comunicazione del nodo del cluster). Così ho config il cliente trasporti nel mio java come questo
Settings settings = ImmutableSettings.settingsBuilder()
.put("client.transport.sniff", true)
.put("client.transport.ignore_cluster_name", true).build();
client = new TransportClient(settings);
((TransportClient) client)
.addTransportAddress(new InetSocketTransportAddress(
"10.211.55.100", 32768));
Allora ottengo i seguenti errori nella console:
Caused by: org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []
at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:305)
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:200)
at org.elasticsearch.client.transport.support.InternalTransportIndicesAdminClient.execute(InternalTransportIndicesAdminClient.java:86)
at org.elasticsearch.client.support.AbstractIndicesAdminClient.exists(AbstractIndicesAdminClient.java:170)
at org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequestBuilder.doExecute(IndicesExistsRequestBuilder.java:53)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:91)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:65)
at cct.bigdata.yellowbook.service.impl.ResourceServiceImpl.<init>(ResourceServiceImpl.java:49)
at cct.bigdata.yellowbook.config.YellowBookConfig.resourceService(YellowBookConfig.java:21)
at cct.bigdata.yellowbook.config.YellowBookConfig$$EnhancerBySpringCGLIB$$e7d2ff3e.CGLIB$resourceService$0(<generated>)
at cct.bigdata.yellowbook.config.YellowBookConfig$$EnhancerBySpringCGLIB$$e7d2ff3e$$FastClassBySpringCGLIB$$72e3e213.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:312)
at cct.bigdata.yellowbook.config.YellowBookConfig$$EnhancerBySpringCGLIB$$e7d2ff3e.resourceService(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166)
... 31 common frames omitted
Quando eseguo l'elasticsearch direttamente nell'ospite. è tutto a posto.
Controllo tutto il dockerfile di elasticsearch sull'hub docker. Sembra che tutti si limitino a fare quanto segue:
EXPOSE 9200 9300
Mi chiedo se qualcuno abbia provato a fare le cose simili. Il 9300 è la normale porta TCP o porta UDP? Devo fare qualcosa di speciale per farlo durante l'esecuzione del container? Grazie!
grazie, funziona –