Приложение, работающее в docker, не может подключиться кasticsearch docker - PullRequest
0 голосов
/ 12 апреля 2020

Я новичок в docker и имею простое приложение DW (dropwizard), которое подключается кasticsearch, которое уже работает в docker с использованием docker -compose.yml, который имеет следующее содержимое.

Docker -compose.yml дляasticsearch

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 как порт ES на моем хосте (локальная ма c system)

Теперь все работает нормально, когда я просто запускаю свое приложение DW, которое подключается к ES в 8200 на локальном хосте, , но сейчас я пытаюсь докеризировать свое приложение DW и сталкиваюсь с несколькими проблемами.

Ниже приведен мой Dockerfile для приложения DW

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 не может подключиться кasticsearch, который я проверил работает нормально.
  2. Также проверил Работа Elaticsearch docker и сетевой псевдоним elasticsearch, как показано ниже, и n / w docker-files_default.

    "Aliases": ["asticsearch "," de78c684ae60 "],

  3. Проверено ч / б моего экземпляра приложения DW docker, он использует bridge сеть и не имеет сетевого псевдонима.

Теперь, как я могу сделать так, чтобы и мое приложение docker, иasticsearch docker использовали одну и ту же сеть, чтобы они могли соединяться друг с другом, думаю, это решило бы проблему?

1 Ответ

1 голос
/ 12 апреля 2020

Два способа решить эту проблему: во-первых, проверить, какая сеть docker -композиция создана для настройки эластичного поиска (docker network ls), а затем запустить приложение DW с

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

Второй способ - создать сеть docker network create elastic и использовать ее в качестве внешней сети в файле docker compose, а также в команде docker run для приложения DW.

Docker compose файл может выглядеть как

...
services:
  elasticsearch:
     networks:
       elastic:
...
networks:
    elastic:
        external: true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...