title: Connecting to Docker Elasticsearch instance through Java/Spring Boot
body: <p>I'm running Elasticsearch instance from Docker. The image is from jHipster docker hub repo: <a href="https://hub.docker.com/r/jhipster/jhipster-elasticsearch/" rel="noreferrer">jhipster/jhipster-elasticsearch/</a> - I'm using image v1.3.2 because I need Elasticsearch 2.4.0 (to be in line with Spring Boot version of the project).</p>
  
  <p>I'm starting ES container along with Logstash and Kibana images, with <code>docker-compose</code>. This are the settings for starting ES container:</p>
  
  <pre><code>jhipster-elasticsearch:
      image: jhipster/jhipster-elasticsearch:v1.3.2
      ports:
          - 9400:9200
          - 9500:9300
      volumes:
         - ./log-es-config/elasticsearch_custom.yml:/usr/share/elasticsearch/config/elasticsearch.yml
  </code></pre>
  
  <p>So I'm using 9400 for REST and 9500 for transport communication.</p>
  
  <p>This is configuration inside <code>elasticsearch_custom.yml</code> that is mounted to ES config:</p>
  
  <pre><code>cluster.name: "log-cluster"
  node.name: "log-node"
  http.host: 0.0.0.0
  transport.host: 127.0.0.1
  transport.tcp.port: 9500
  transport.publish_port: 9500
  </code></pre>
  
  <p>When I start container, this is what I get from <code>http://localhost:9400/_nodes</code>:</p>
  
  <pre><code>"cluster_name": "log-cluster",
    "nodes": {
      "xLsGj2DyTdCF89I7sAToVw": {
        "name": "log-node",
        "transport_address": "127.0.0.1:9500",
        "host": "127.0.0.1",
        "ip": "127.0.0.1",
        "version": "2.4.0",
        "build": "ce9f0c7",
        "http_address": "172.18.0.5:9200",
        "settings": {
          "cluster": {
            "name": "log-cluster"
          },
          ... (I can put all response if needed)
  </code></pre>
  
  <p><strong>JAVA API:</strong></p>
  
  <p>Now I'm trying to connect to this ES node like this:</p>
  
  <pre><code>    @Bean
      public ElasticsearchOperations logsElasticsearchOperations() throws UnknownHostException {
          Settings settings = Settings.settingsBuilder()
              .put("cluster.name", "log-cluster")
              .put("node.name", "log-node")
              .build();
  
          Client client = TransportClient.builder()
              .settings(settings)
              .build()
              .addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress("127.0.0.1", 9500)));
  
  
          ElasticsearchTemplate template = new ElasticsearchTemplate(client);
          template.createIndex(ProcessLog.class);
          log.debug("Elasticsearch for logs configured.");
          return template;
      }
  </code></pre>
  
  <p>The error I'm getting is the most famous one:</p>
  
  <p><strong><code>Caused by: org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{127.0.0.1}{127.0.0.1:9500}]</code></strong></p>
  
  <p>I googled and tried different config approaches, also with <code>client.transport.sniff</code> set to <code>false</code>, but non of those worked. Now I spent lots of time trying to configure this one and I'm still missing something.</p>
  
  <p>Thanks in advance for help. </p>
  
  <p><strong>UPDATE:</strong></p>
  
  <p>There is also embedded ES instance running when I start the app. So host ports config is like this:</p>
  
  <ul>
  <li>Embedded ES: 9200 (http), 9300 (tcp)</li>
  <li>Docker's ES: 9400 (http), 9500 (tcp)</li>
  </ul>
  
  <p>Here is full <code>docker-compose.yml</code>:</p>
  
  <pre><code>    version: '2'
      services:
      jhipster-elasticsearch:
          # elasticsearch 2.4.0 - to be in line with spring boot version
          image: jhipster/jhipster-elasticsearch:v1.3.2
          ports:
              - 9400:9200
              - 9500:9300
          volumes:
             - ./log-es-config/elasticsearch_custom.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      jhipster-logstash:
          image: jhipster/jhipster-logstash:v2.2.1
          command: logstash -f /conf/logstash_custom.conf
          ports:
              - 5000:5000/udp
              - 6000:6000/tcp
          volumes:
              - ./logstash-log-es-conf/:/conf
      jhipster-console:
          image: jhipster/jhipster-console:v2.0.1
          ports:
              - 5601:5601
      jhipster-zipkin:
          image: jhipster/jhipster-zipkin:v2.0.1
          ports:
              - 9411:9411
          environment:
              - ES_HOSTS=http://jhipster-elasticsearch:9400
              - ZIPKIN_UI_LOGS_URL=http://localhost:5601/app/kibana#/dashboard/logs-dashboard?_g=(refreshInterval:(display:Off,pause:!f,value:0),time:(from:now-1h,mode:quick,to:now))&amp;_a=(filters:!(),options:(darkTheme:!f),panels:!((col:1,id:logs-levels,panelIndex:2,row:1,size_x:6,size_y:3,type:visualization),(col:7,columns:!(stack_trace),id:Stacktraces,panelIndex:7,row:1,size_x:4,size_y:3,sort:!('@timestamp',desc),type:search),(col:11,id:Log-forwarding-instructions,panelIndex:8,row:1,size_x:2,size_y:3,type:visualization),(col:1,columns:!(app_name,level,message),id:All-logs,panelIndex:9,row:4,size_x:12,size_y:7,sort:!('@timestamp',asc),type:search)),query:(query_string:(analyze_wildcard:!t,query:'{traceId}')),title:logs-dashboard,uiState:())
  </code></pre>