2016-10-31 2 views
10

Я попытался создать Kibana и Elasticsearch, и кажется, что у Kibana возникают проблемы с идентификацией Elasticsearch.Kibana on Docker не удается подключиться к 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 t, когда я подключаюсь к 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/

+0

У вас есть какая-то причина, почему вы Арент с помощью докер сочинить? – VladoDemcak

+0

спасибо за комментарий @VladoDemcak .. Я использовал предложение Andreas и что работает :) –

ответ

16

Есть некоторые недоразумения о том, что localhost или 127.0.0.1 означает, что при запуске команды внутри контейнера. Поскольку каждый контейнер имеет свою собственную сеть, localhost - это не ваша реальная хост-система, а сам контейнер. Поэтому, когда вы используете кибану и указываете переменную ELASTICSEARCH_URL на localhost:9200, процесс kibana будет искать поиск 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 
+0

для дополнительной ясности создайте 'docker-compose.yml 'файл с докером составите фрагмент в нижней части ответа, затем запустите' docker-compose up', чтобы запустить стек. – scald

1

Тест:

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

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

С уважением

+0

Спасибо за ответ Карлос, Принятый ответ работает как предложено @Andreas .. Таким образом, решением является: '' ' docker run -d --network mynetwork -e ELASTICSEARCH_URL = http: // elasticsearch_2_4: 9200 -p 5601: 5601 --name kibana_4_6 kibana: 4.6 ' '' –

0

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

Kitematic Kibana Settings[1]

Смежные вопросы