【问题标题】:Spring boot unable to connect to elasticsearch dockerSpring Boot 无法连接到 elasticsearch docker
【发布时间】:2020-07-31 17:34:33
【问题描述】:

我的 Elasticsearch docker-compose 文件就是这样

version: '3'

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.8.6
    container_name: elasticsearch
    environment:
      - cluster.name=cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./config/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/elasticsearch.yml
      - esdata6:/usr/share/elasticsearch/data    
    ports:
      - "9200:9200"
  kibana:
    image: docker.elastic.co/kibana/kibana:6.8.6
    container_name: kibana
    volumes:
      - ./config/kibana/kibana.yml:/usr/share/kibana/kibana.yml
    restart: on-failure
    ports:
      - "5601:5601"

volumes:
  esdata6:

我有一个spring boot应用程序,application.properties是

spring.data.elasticsearch.repositories.enabled=true
spring.data.elasticsearch.cluster-nodes=localhost:9200
spring.data.elasticsearch.cluster-name=cluster

但是,我得到了错误

2020-04-18 13:49:45.775  INFO 7576 --- [           main] o.s.d.e.c.TransportClientFactoryBean     : Adding transport node : 127.0.0.1:9200
2020-04-18 13:50:16.961 ERROR 7576 --- [           main] .d.e.r.s.AbstractElasticsearchRepository : failed to load elasticsearch nodes : org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{Lzoi5ddvSJizvu4g3Y3E6Q}{localhost}{127.0.0.1:9200}]

问题: 1)我如何在外部使用弹簧靴连接到弹性搜索? 2)如果我将弹性和springboot应用程序一起docker-compose,它们将在同一个网络上。为了连接到弹性搜索,我应该对 spring.data.elasticsearch.cluster-nodes 进行哪些更改?

我在 Spring Boot 应用程序中使用 spring-boot-starter-data-elasticsearch。

【问题讨论】:

  • 这篇文章可能对您有所帮助stackoverflow.com/questions/61171399/…,如果您有类似的要求或需要更多信息,请发表评论
  • 我的 docker-compose 文件中的 spring boot 应用程序和我的 es docker-compose 文件在同一个目录中,因此它们在同一个 docker 网络上。 spring boot 应用程序应该能够通过服务名称访问 elasticsearch。无论如何,我也在链接中尝试了您的建议,但仍然无法连接。它说未知主机
  • 您可以将docker inpsect container-id 用于 spring 应用程序和 es docker 容器,并在输出中检查两者的网络部分并粘贴到此处吗?

标签: java spring-boot docker elasticsearch


【解决方案1】:

在您的 application.properties 文件中,spring.data.elasticsearch.cluster-nodes 应该是 elasticsearch:9200 而不是 localhost:9200。

【讨论】:

    【解决方案2】:

    这与我几天前遇到的问题几乎相似,并且在this SO 问题中也提到过,但让我在这里解释一下,因为我解决了您的用例中有一些类似的警告。

    使用 docker inspect container-id 检查了我的 elasticsearch docker 容器使用的网络,其中一部分如下所示:

    "Networks": {
                "docker-files_default": {->this is network name used by elasticsearch docker.
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "elasticsearch",
                        "de78c684ae60"
                    ],
    

    现在为我的应用定义了我的 docker-compose,如下所示:

    version: '3'
    services:
      web:
        build: .
        ports:
          - "8080:8080"
        volumes:
          - .:/code
        networks: --> see it uses the network section and below which defines the same network used by elastic docker 
          - docker-files_default
    
    networks:  --> note this section as well, you need to add this as well.
      docker-files_default:
        external: true
    

    之后,由于两个 docker 容器使用同一个网络,您可以使用您的 elasticsearch docker 容器名称,即 elasticsearch,如您的 elastic docker-compose.yml 所示。 所以下面的弹性弹簧配置将是:

    spring.data.elasticsearch.cluster-nodes=elasticsearch:9200
    

    【讨论】:

      猜你喜欢
      • 2020-07-12
      • 2018-02-10
      • 2019-01-29
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 2019-10-19
      • 2020-06-06
      相关资源
      最近更新 更多