Docker上的Kibana无法连接到Elasticsearch

我试图创buildKibana和Elasticsearch,似乎Kibana在识别Elasticsearch时遇到了麻烦。

这是我的步骤:

1)创buildnetworking

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 

当我通过浏览器通过http:// localhost:9200 /连接到Elasticsearch时,我得到了一个JSON输出。

但是当我打开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/

在容器中运行一个命令时,对localhost127.0.0.1含义有一些误解。 由于每个容器都有自己的networking,因此localhost不是您的真正主机系统,而是容器本身。 所以当你运行kibana并将ELASTICSEARCH_URLvariables指向localhost:9200 ,kibana进程将在kibana容器内部寻找elasticsearch,当然这个容器并不在那里运行。

您已经引入了启动容器时引用的一些自定义networking。 在同一个networking中运行的所有容器都可以通过其端口上的名字相互引用(参见Dockerfiles)。 在您命名您的elasticsearch容器elasticsearch_2_4 ,可以将elasticsearch的http端点引用为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映射到主机。

我build议使用docker-compose来pipe理所有服务和参数,而不是单独启动所有容器。 您还应该考虑装入一个本地文件夹作为卷来保持数据。 这可能是你的撰写文件。 添加networks ,如果你需要有外部networking,否则这个设置只是为你创build一个networking。

 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 

testing:

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

您可以使用您的主机IP或由ifconfig中的docker0标识的IP进行testing

问候

我更改了Kibana容器的networkingconfiguration,之后它工作正常:

Kitematic Kibana设置[1]

Interesting Posts