java - docker中运行的应用程序无法与elasticsearch docker连接

标签 java amazon-web-services docker docker-compose docker-network

我是 docker 新手,有一个连接到 elasticsearch 的简单 DW(dropwizard) 应用程序,该应用程序已经使用 docker-compose.yml 在 docker 中运行,其中包含以下内容。

用于elasticsearch的Docker-compose.yml

version: '2.2'

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0
    container_name: elasticsearch
    environment:
      - xpack.security.enabled=false
      - discovery.type=single-node
    ports:
      - 8200:9200
      - 8300:9300

volumes:
  elasticsearch-data:
    driver: local

注意:我将 8200 和 8300 作为主机(本地 Mac 系统)上的 ES 端口公开

现在,当我简单地运行连接到本地主机上 8200 中的 ES 的 DW 应用程序时,一切都工作正常,但现在我正在尝试对我的 DW 应用程序进行 docker 化,但遇到了一些问题。

下面是我的 DW 应用程序的 Dockerfile

COPY target/my.jar my.jar
COPY config.yml config.yml
ENTRYPOINT ["java" , "-jar" , "my.jar", "server", "config.yml"]

当我运行上面的 DW docker 镜像时,它立即停止,使用 docker logs <my-container-id> ,它抛出以下异常:

*java.io.IOException: elasticsearch: Name does not resolve*
    org.elasticsearch.client.IndicesClient.exists(IndicesClient.java:827)
**Caused by: java.net.UnknownHostException: elasticsearch: Name does not resolve**

我尝试过的事情

  1. 错误消息清楚地提到我的 DW 应用程序 docker 实例无法连接到 elasticsearch,我已验证该实例运行良好。
  2. 还检查了 Elaticsearch docker 的网络,它的网络别名为 elasticsearch如下所示,n/w 为 docker-files_default .

    “别名”:[ “ Elasticsearch ”, “de78c684ae60” ],

  3. 检查了我的 DW 应用程序 docker 实例的 n/w,它使用 bridge网络并且没有任何网络别名。

现在,如何让我的应用程序 docker 和 elasticsearch docker 使用同一网络,以便它们可以相互连接,我想这可以解决问题?

最佳答案

解决此问题的方法有两种:首先是检查 docker-compose 为您的 elasticsearch 设置 ( docker network ls ) 创建的网络,然后运行您的 DW 应用

docker run --network=<name of network> ...

第二种方法是创建网络 docker network create elastic并将其用作 docker compose 文件以及 DW 应用程序的 docker run 命令中的外部网络。

Docker 撰写文件可能如下所示

...
services:
  elasticsearch:
     networks:
       elastic:
...
networks:
    elastic:
        external: true

关于java - docker中运行的应用程序无法与elasticsearch docker连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61171399/

相关文章:

Java 文本文件大小(文件关闭前)

amazon-web-services - 我应该如何处理 Terraform 中的 `deposed` 资源?

mysql - EC2操作的明智替代解决方案

amazon-web-services - 在EMR集群上如何进入/etc/hadoop/conf这个路径?

docker - 限制完全关闭后启动容器

bash - 在Docker中使用sed替换路径

docker - 如何启动minikube?

java - 无法在基元上调用 Equals 方法->重写 Equals 方法不起作用 - Java 中初学者的错误

java - 从字符串中读取 rdf 模型

java - ThreadPoolTask​​Executor 优雅关闭