Kibana на Docker не может подключиться к Elasticsearch

Я попытался создать Kibana и Elasticsearch, и кажется, что Kibana испытывает трудности с выявлением Elasticsearch.

Вот мои шаги:

1) Создать сеть

docker network create mynetwork --driver=bridge

2) Запустите контейнер Elasticsearch

docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch_2_4 --network mynetwork elasticsearch:2.4

3) Запустить контейнер Kibana

docker run -i --network mynetwork -p 5601:5601 kibana:4.6

Я получаю вывод JSON, когда подключаюсь к Elasticsearch через http://localhost:9200/ через мой браузер.

Но когда я открываю http://localhost:5601/, я получаю

Unable to connect to Elasticsearch at http://elasticsearch:9200.

Альтернативный подход

Я по-прежнему получаю аналогичную ошибку при попытке

docker run -d -e ELASTICSEARCH_URL=http://127.0.0.1:9200 -p 5601:5601 kibana:4.6

где я получаю ошибку

Unable to connect to Elasticsearch at http://127.0.0.1:9200.

Мой пост в блоге, основанный на принятом ответе: https://gunith.github.io/docker-kibana-elasticsearch/

Ответ 1

Существует некоторое недоразумение о том, что означает localhost или 127.0.0.1 при запуске команды внутри контейнера. Поскольку каждый контейнер имеет свою собственную сеть, localhost - это не ваша реальная хост-система, а сам контейнер. Поэтому, когда вы запускаете кибану и указываете переменную ELASTICSEARCH_URL на localhost:9200, процесс кибаны будет искать поиск elastics в контейнере kibana, который, конечно, не работает там.

Вы уже представили какую-то пользовательскую сеть, на которую вы ссылались при запуске контейнеров. Все контейнеры, работающие в одной сети, могут ссылаться друг на друга по имени на своих портах expose d (см. Dockerfiles). Когда вы назвали свой контейнер elasticsearch elasticsearch_2_4, вы можете ссылаться на конечную точку http elasticsearch как http://elasticsearch_2_4:9200.

docker run -d --network mynetwork -e ELASTICSEARCH_URL=http://elasticsearch_2_4:9200 -p 5601:5601 kibana:4.6

Если вам не нужно напрямую обращаться к экземпляру elasticsearch, вы можете даже опустить сопоставление портов 9200 и 9300 с вашим хостом.

Вместо того, чтобы запускать все контейнеры самостоятельно, я также предложил бы использовать docker-compose для управления всеми службами и параметрами. Вы также должны рассмотреть возможность установки локальной папки в качестве тома, чтобы сохранить данные. Это может быть ваш файл сочинения. Добавьте networks, если вам нужна внешняя сеть, иначе эта настройка просто создает для вас сеть.

version: "2"

services:

  elasticsearch:
    image: elasticsearch:2.4
    ports:
      - "9200:9200"
    volumes:
      - ./esdata/:/usr/share/elasticsearch/data/

  kibana:
    image: kibana:4.6
    ports:
      - "5601:5601"
    environment:
      - ELASTICSEARCH_URL=http://elasticsearch:9200

Ответ 2

Тест:

docker run -d -e ELASTICSEARCH_URL=http://yourhostip:9200 -p 5601:5601 kibana:4.6

Вы можете протестировать свой IP-адрес хоста или ip, идентифицированный docker0 в ifconfig

Привет

Ответ 3

Я изменил конфигурацию сети для контейнера Kibana, и после этого он отлично работает:

Kitematic Kibana Settings[1]