我正在尝试从同样位于容器内的 Java 应用程序访问容器内的 Elasticsearch 数据库。
它们都在以下 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
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用桥接网络使容器彼此可见和可访问。
在我的 Java 应用程序中,我使用 RestHighLevelClient:
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("es", 9200, "http")));
Run Code Online (Sandbox Code Playgroud)
我还尝试使用“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) …Run Code Online (Sandbox Code Playgroud)