簡體   English   中英

Elasticsearch 客戶端無法連接 docker 容器中的 elasticsearch

[英]Elasticsearch client can't connect elasticsearch in docker container

我正在嘗試在容器內的 Java 應用程序中使用 Elasticsearch,該應用程序也在容器內。 如果沒有 docker 容器,我的應用程序可以正確連接到本地 elasticsearch。 我的 docker-compose 文件:

version: "3.7"

volumes:
  postgis:

services:
  database:
    container_name: database
    build:
      postgis/
    ports:
      - 5432:5432
    volumes:
      - ./postgis:/var/lib/postgresql:rw
    restart: on-failure
    networks:
      - net

  application:
    depends_on:
      - database
      - es
    container_name: application
    build:
      application/
    ports:
      - $LORRYAPP_DEBUG_PORT:8080
    volumes:
      - ./application:/app:rw
    environment:
      LORRYAPP_OPTS: $LORRYAPP_OPTS
    restart: on-failure
    networks:
      - net

  es:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      - discovery.type=single-node
    networks:
      - net

networks:
  net:
    driver: bridge

在ctor中初始化es-client:

public ElasticSearchDao(ObjectMapper mapper) {
    this.esClient = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://localhost:9200")));
    this.mapper = mapper;
} 

堆棧跟蹤:

java.net.ConnectException: Connection refused
        at org.elasticsearch.client.RestClient.extractAndWrapCause(RestClient.java:788) ~[elasticsearch-rest-client-7.4.0.jar!/:7.4.0]
        at org.elasticsearch.client.RestClient.performRequest(RestClient.java:218) ~[elasticsearch-rest-client-7.4.0.jar!/:7.4.0]
        at org.elasticsearch.client.RestClient.performRequest(RestClient.java:205) ~[elasticsearch-rest-client-7.4.0.jar!/:7.4.0]
        at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1454) ~[elasticsearch-rest-high-level-client-7.4.0.jar!/:7.4.0]
        at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1424) ~[elasticsearch-rest-high-level-client-7.4.0.jar!/:7.4.0]
        at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1394) ~[elasticsearch-rest-high-level-client-7.4.0.jar!/:7.4.0]
        at org.elasticsearch.client.RestHighLevelClient.index(RestHighLevelClient.java:836) ~[elasticsearch-rest-high-level-client-7.4.0.jar!/:7.4.0]

ES 可通過瀏覽器使用。 http://0.0.0.0:9200/ , http://127.0.0.1:9200/ , http://localhost:9200/給出響應:

{
  "name" : "254bdb7bcc2a",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "vm537RNGSiG3dW8ag2MDTw",
  "version" : {
    "number" : "7.6.1",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "aa751e09be0a5072e8570670309b1f12348f023b",
    "build_date" : "2020-02-29T00:15:25.529771Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

我認為這可能與我很久以前問過的問題有關。

使用 NEST 訪問 Elasticsearch Docker 實例

它針對 C#,這確實是容器的問題。 在我的情況下發生的事情是客戶端將連接到 docker,獲取僅用於容器間通信的內部 IP,然后嘗試使用此 IP 來保持連接打開 - 這顯然不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM