Как я могу подключиться от контейнера (API) к контейнеру (asticsearch)? - PullRequest
0 голосов
/ 02 июня 2019

У меня есть 2 контейнера. Один из них - веб-API, а другой - эластичный поиск. Когда я до API на локальной машине (без контейнера) и В программеласти поиска данных в контейнере Docker. Я могу индексировать данные для поиска в эластичных системах, а также URL-адреса подключения к программе поиска в упорядоченном виде, например http://localhost:9200, проблем нет.

Но, когда я хочу обновить API с помощью Docker-контейнера иasticsearch с помощью Docker-контейнера, возникает какая-то проблема, я не могу индексировать данные вasticsearch с таким же URL-адресом соединения, например http://localhost:9200

так что я думаю, что проблема связана с URL-адресом соединения, но я не уверен. Мой докер создает, как показано ниже.

version: '3'
services:
    web:
      build: .
      ports:
       - "8080:80"
      network : 
        - host
      container_name : DataCollectorAPI
    elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0
        ports:
          - "9200:9200"
          - "9300:9300"
        environment:
          - discovery.type=single-node

Ответы [ 2 ]

2 голосов
/ 02 июня 2019

Вы должны связать контейнер, как это

web:
    ....
    links:
     - elasticsearch
    depends_on:
     - elasticsearch

Затем из вашего веб-контейнера используйте elasticsearch в качестве имени хоста.

См. docker-compose.yml документация для подробностей.

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

Ссылки не требуются для обеспечения связи между службами - по умолчанию любая служба может достигатьлюбая другая служба на имя этой службы.

1 голос
/ 02 июня 2019

Но когда я хочу обновить API с помощью Docker-контейнера иasticsearch с помощью Docker-контейнера, возникает некоторая проблема, я не могу проиндексировать данные дляasticsearch с таким же URL-адресом соединения, например http://localhost:9200

Если вы хотите получить доступ к elasticsearch контейнеру из вашего web контейнера, вы должны использовать url elasticsearch:9200. По умолчанию docker-compose создаст сеть для сервисов, определенных внутри нее, и все контейнеры присоединятся к этой сети с DNS-именами в качестве имен в docker-compose. Когда вы используете контейнер http://localhost:9200 из web, вы пытаетесь получить доступ к контейнеру localhost из web - не эластичный поиск.

...