2016-10-31 31 views
10

Próbowałem utworzyć Kibana i Elasticsearch i wygląda na to, że Kibana ma problem z identyfikacją Elasticsearch.Kibana na Dockerze nie może połączyć się z Elasticsearch

Oto moje kroki:

1) Tworzenie sieci

docker network create mynetwork --driver=bridge 

2) Run Elasticsearch Pojemnik

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

3) Run Kibana Pojemnik

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

otrzymuję wyjście JSON t po połączeniu się z Elasticsearch przez http://localhost:9200/ przez moją przeglądarkę.

Ale gdy otwieram http://localhost:5601/ uzyskać

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

Alternatywne podejście,

nadal uzyskać podobny błąd, gdy próbuję

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

gdzie pojawia się błąd

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

Moja blogu na podstawie zaakceptowanej odpowiedzi: https://gunith.github.io/docker-kibana-elasticsearch/

+0

Czy masz jakiś powód, dlaczego nie jest z ciebie korzystając docker komponować? – VladoDemcak

+0

Dzięki za komentarz na @VladoDemcak .. Kiedyś sugestię Andreas a także działa :) –

Odpowiedz

16

Istnieje kilka nieporozumień dotyczących tego, co localhost lub 127.0.0.1 oznacza podczas uruchamiania polecenia wewnątrz kontenera. Ponieważ każdy kontener ma swoją własną sieć, localhost nie jest twoim prawdziwym systemem hosta, ale samym kontenerem. Tak więc, gdy uruchomisz kibana i wskażesz zmienną ELASTICSEARCH_URL na localhost:9200, proces kibana będzie szukał elastycznego wyszukiwania wewnątrz kontenera kibana, który oczywiście nie jest tam uruchomiony.

Wprowadziłeś już niestandardową sieć, do której odwołujesz się podczas uruchamiania kontenerów. Wszystkie kontenery działające w tej samej sieci mogą odwoływać się do siebie poprzez nazwy na ich portach d (zobacz Pliki Docker). Jak nazwałeś swój pojemnik elasticsearch elasticsearch_2_4, możesz odwołać się do punktu końcowego http elasticsearch jako http://elasticsearch_2_4:9200.

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

Dopóki nie potrzebują dostępu do elasticsearch instancji bezpośrednio, można nawet pominąć mapowania portów 9200 i 9300 do hosta.

Zamiast uruchamiać wszystkie kontenery samodzielnie, sugerowałbym również użycie docker-compose do zarządzania wszystkimi usługami i parametrami. Powinieneś także rozważyć zamontowanie lokalnego folderu jako woluminu, aby dane pozostały.To może być twój plik do komponowania. Dodaj networks, jeśli potrzebujesz zewnętrznej sieci, w przeciwnym razie ta konfiguracja po prostu stworzy dla ciebie sieć.

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

dla dodatkowej przejrzystości, utwórz 'docker-compose.yml 'plik z dokowaniem ułóż fragment kodu u dołu odpowiedzi, następnie uruchom' docker-compose up', aby odstawić stos. – scald

1

Test:

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

można przetestować z IP hosta lub adres IP zidentyfikowanego przez docker0 w ifconfig

Pozdrawiam

+0

Dzięki za odpowiedzi Carlos, Zaakceptowanych odpowiedź pracuje jako sugerowane przez @Andreas .. więc rozwiązanie to: ' ' uruchamianie dockera -d --network mynetwork -e ELASTICSEARCH_URL = http: // elasticsearch_2_4: 9200 -p 5601: 5601 --name kibana_4_6 kibana: 4.6 ' '' –

0

Zmieniłem konfigurację sieciową dla Kibana pojemnika i po to działa dobrze:

Kitematic Kibana Settings[1]