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/
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
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
j'ai changé la configuration du réseau pour Kibana container et après ça ça marche très bien: