Kibana на Docker не удается подключиться к Elasticsearch
Я попытался создать Kibana и Elasticsearch, и кажется, что у Kibana возникли проблемы с идентификацией 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 при подключении к 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/
3 ответов
существует некоторое недопонимание о том, что localhost
или 127.0.0.1
означает, что при выполнении команды внутри контейнера. Потому что каждый контейнер имеет свою собственную сеть, localhost
это не ваша реальная хост-система, но либо сам контейнер. Поэтому, когда вы запускаете kibana и указываете ELASTICSEARCH_URL
переменная localhost:9200
процесс kibana будет искать elasticsearch внутри контейнера 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
для управления всеми службами и параметрами. Вы также должны рассмотреть возможность подключения локальной папки в качестве тома для сохранения данных. Это может быть ваш файл 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
тест:
docker run -d -e ELASTICSEARCH_URL=http://yourhostip:9200 -p 5601:5601 kibana:4.6
вы можете протестировать свой IP-адрес хоста или ip-адрес, идентифицированный docker0 в ifconfig
в отношении