Docker上的Kibana无法连接到Elasticsearch

时间:2016-10-31 11:33:30

标签: elasticsearch docker kibana kibana-4 elasticsearch-2.0

我尝试创建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

当我通过浏览器通过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/

3 个答案:

答案 0 :(得分:40)

在容器内运行命令时,localhost127.0.0.1的含义存在一些误解。因为每个容器都有自己的网络,localhost不是真正的主机系统,而是容器本身。因此,当您运行kibana并将ELASTICSEARCH_URL变量指向localhost:9200时,kibana进程将在kibana容器内寻找弹性搜索,当然这些容器不会在那里运行。

您已经介绍了启动容器时引用的一些自定义网络。在同一网络中运行的所有容器可以通过其expose d端口上的名称相互引用(请参阅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映射到主机。

我还建议使用docker-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

答案 1 :(得分:4)

我更改了Kibana容器的网络配置,之后工作正常:

Kitematic Kibana Settings[1]

答案 2 :(得分:3)

测试:

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

您可以使用主机IP或ifer

中的docker0识别的ip进行测试

此致