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

Application running in docker can't connect with elasticsearch docker

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

Docker-compose.yml for elasticsearch

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

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

现在,当我只是 运行 我的 DW 应用程序连接到本地主机上 8200 中的 ES 时一切正常,但现在我正在尝试 docker 化我的 DW 应用程序并且面临一些问题。

下面是我的 DockerDW 应用文件

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,我已验证 运行ning 正常。
  2. 还检查了 Elaticsearch docker 的网络,它的网络别名是 elasticsearch,如下所示,n/w 是 docker-files_default

    "Aliases": [ "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 撰写文件以及 docker 运行 命令中将其用作外部网络DW 应用

Docker 组合文件看起来像

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