Отказался от подключения от docker к контейнеру Elasticsearch docker - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь получить доступ к базе данных Elasticsearch внутри контейнера из приложения Java, которое также находится внутри контейнера.

Оба они находятся в следующем docker -compose.yml:

version: "3.7"
services:
  es:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
    ports:
      - "9200:9200"
      - "9300:9300"
    networks:
      - elastic

  java-app:
    image: neileen/dockerhub_app:java-latest
    ports:
      - "8080:8080"
    depends_on:
      - es
    networks:
      - elastic

networks:
  elastic:
    driver: bridge

Как видите, я использую мостовую сеть, чтобы сделать контейнеры видимыми и доступными друг другу.

В моем приложении Java я использую RestHighLevelClient:

RestHighLevelClient client = new RestHighLevelClient(
                    RestClient.builder(
                            new HttpHost("es", 9200, "http")));

Я также пытался использовать «localhost» и «0.0.0.0» в качестве имени хоста вместо «es» без результата.

Исключение, которое я продолжаю получать:

java-app_1     | The cluster is unhealthy: Connection refused
java-app_1     | java.net.ConnectException: Connection refused
java-app_1     |        at org.elasticsearch.client.RestClient.extractAndWrapCause(RestClient.java:804)
java-app_1     |        at org.elasticsearch.client.RestClient.performRequest(RestClient.java:225)
java-app_1     |        at org.elasticsearch.client.RestClient.performRequest(RestClient.java:212)

Я знаю, что это проблема, связанная с тем, что порт 9200 не виден внутри контейнера java -app, но я не знаю, где проблема, поскольку я уже предоставил пользовательскую сеть и использовал имя контейнера в качестве имени хоста.

Примечание

ES доступен через "http://localhost: 9200 "

Заранее спасибо.

1 Ответ

1 голос
/ 11 марта 2020

Elasticsearch выполняет некоторые bootstrap проверки при запуске. Если вы хотите запустить его как один узел в Docker, вам необходимо отключить их, иначе он не откроет порт TCP / IP.

Это можно сделать, указав параметр среды: discovery.type = один узел .

services:
  es:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      - discovery.type=single-node
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...