2015-05-14 18 views
7

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!

risposta

1

Questo funziona per me (in finestra mobile-compose.yml).

version: "2" 
services: 
    elasticsearch5: 
     image: docker.elastic.co/elasticsearch/elasticsearch:5.5.3 
     container_name: elasticsearch5 
     environment: 
      - cluster.name=elasticsearch5-cluster 
      - http.host=0.0.0.0 
      - network.publish_host=127.0.0.1 
      - transport.tcp.port=9700 
      - discovery.type=single-node 
      - xpack.security.enabled=false 
     ports: 
      - "9600:9200" 
      - "9700:9700" 

Specificare network.publish_host e transport.tcp.port sembra fare il trucco. E sniff = true funziona ancora.

Problemi correlati