Kibana on Docker ne peut pas se connecter à Elasticsearch

j'ai essayé de créer Kibana et Elasticsearch et il semble que Kibana ait du mal à identifier Elasticsearch.

Voici mes étapes:

1) Créer un réseau

docker network create mynetwork --driver=bridge

2) Exécuter Elasticsearch Conteneur

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

3) Exécuter Kibana Conteneur

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

j'obtiens une sortie JSON quand je me connecte à Elasticsearch via http://localhost:9200/ via mon navigateur.

mais quand j'ouvre http://localhost:5601/ je

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

Autre Approche,

j'obtiens toujours une erreur similaire quand j'ai essayer

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

où je reçois le message d'erreur

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

Mon blog basé sur le acceptées réponse: https://gunith.github.io/docker-kibana-elasticsearch/

16
demandé sur Gunith D 2016-10-31 14:33:29

3 réponses

Il y a un malentendu à propos de ce que localhost ou 127.0.0.1 signifie exécuter une commande à l'intérieur d'un conteneur. Parce que chaque conteneur a son propre réseau,localhost n'est pas votre vrai système hôte, mais le conteneur lui-même. Donc quand vous courez kibana et pointez le ELASTICSEARCH_URL variable à localhost:9200 le processus de kibana cherchera elasticsearch à l'intérieur du conteneur de kibana qui, bien sûr, n'est pas en cours d'exécution.

vous avez déjà introduit un réseau personnalisé qui vous référencées lors du démarrage de l'conteneurs. Tous les conteneurs qui fonctionnent dans le même réseau peuvent faire référence les uns aux autres via le nom sur leur expose d ports (voir Dockerfiles). Comme vous l'avez nommé votre conteneur elasticsearch elasticsearch_2_4, vous pouvez faire référence au paramètre http d'elasticsearch comme http://elasticsearch_2_4:9200.

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

tant que vous n'avez pas besoin d'accéder directement à l'instance elasticsearch, vous pouvez même omettre de mapper les ports 9200 et 9300 sur votre hôte.

au lieu de tout commencer conteneurs sur leur propre, je suggérerais également d'utiliser docker-compose gérer tous les services et paramètres. Vous devriez également envisager de monter un dossier local comme volume pour avoir les données persistées. Ce pourrait être votre fichier composer. Ajouter le networks, si vous avez besoin du réseau externe, sinon cette configuration crée juste un réseau pour vous.

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
23
répondu Andreas Jägle 2016-10-31 13:47:05

Test:

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

Vous pouvez tester avec votre ip hôte ou l'ip identifiée par docker0 dans ifconfig

Cordialement

2
répondu Carlos Rafael Ramirez 2016-10-31 12:25:55

j'ai changé la configuration du réseau pour Kibana container et après ça ça marche très bien:

Kitematic Kibana Settings[1]

2
répondu kogoia 2017-08-29 11:44:14