Docker 上的 Kibana 无法连接到 Elasticsearch

Kibana on Docker cannot connect to Elasticsearch

我尝试创建 Kibana 和 Elasticsearch,但 Kibana 似乎无法识别 Elasticsearch。

这是我的步骤:

1) 创建网络

docker network create mynetwork --driver=bridge

2) 运行 弹性搜索容器

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.

我的博客 post 基于已接受的答案:https://gunith.github.io/docker-kibana-elasticsearch/

测试:

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

可以用你的主机ip或者ifconfig中docker0识别的ip来测试

此致

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

您已经引入了一些您在启动容器时引用的自定义网络。同一网络中的所有容器 运行 可以通过其 exposed 端口上的名称相互引用(参见 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

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