Я пытаюсь получить доступ к базе данных 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 "
Заранее спасибо.