在Docker中运行的应用程序无法与Elasticsearch Docker连接

时间:2020-04-12 12:22:03

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

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

Docker-compose.yml用于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

注意:我将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都使用同一网络,以便它们可以彼此连接,我想这会解决问题?

1 个答案:

答案 0 :(得分:2)

两种解决方法:首先是检查为您的Elasticsearch设置(docker network ls)创建了哪些网络docker-compose,然后使用以下方式运行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