web-dev-qa-db-fra.com

Kibana sur 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écutez Elasticsearch Container

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

3) Exécutez le conteneur Kibana

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

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

Mais quand j'ouvre http: // localhost: 5601 / je reçois

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

Approche alternative,

Je reçois toujours une erreur similaire lorsque j'essaie

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

où j'obtiens l'erreur

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

Mon article de blog basé sur la réponse acceptée: https://gunith.github.io/docker-kibana-elasticsearch/

29
Gunith D

Il y a un malentendu sur ce que localhost ou 127.0.0.1 signifie lors de l'exécution d'une commande à l'intérieur d'un conteneur. Étant donné que chaque conteneur possède son propre réseau, localhost n'est pas votre véritable système hôte mais le conteneur lui-même. Ainsi, lorsque vous exécutez kibana et pointez le ELASTICSEARCH_URL variable à localhost:9200 le processus kibana recherchera elasticsearch à l'intérieur du conteneur kibana qui bien sûr n'y fonctionne pas.

Vous avez déjà introduit un réseau personnalisé que vous avez référencé lors du démarrage des conteneurs. Tous les conteneurs fonctionnant sur le même réseau peuvent se référencer via le nom sur leurs ports exposed (voir Dockerfiles). Comme vous avez nommé votre conteneur elasticsearch elasticsearch_2_4, vous pouvez référencer le point de terminaison 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 à votre hôte.

Au lieu de démarrer tous les conteneurs par eux-mêmes, je suggère également d'utiliser docker-compose pour gérer tous les services et paramètres. Vous devez également envisager de monter un dossier local en tant que volume pour conserver les données. Cela pourrait être votre fichier de composition. Ajoutez le networks, si vous avez besoin du réseau externe, sinon cette configuration crée simplement 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
42
Andreas Jägle

J'ai changé la configuration réseau pour le conteneur Kibana et après cela, cela fonctionne bien:

Kitematic Kibana Settings[1]

4
kogoia

Tester:

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

3