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来测试
此致
对于容器内的 运行 命令时 localhost
或 127.0.0.1
的含义存在一些误解。因为每个容器都有自己的网络,所以 localhost
不是您真正的主机系统,而是容器本身。因此,当您在 运行 kibana 并将 ELASTICSEARCH_URL
变量指向 localhost:9200
时,kibana 进程将在 kibana 容器内查找 elasticsearch,当然 运行 不在那里。
您已经引入了一些您在启动容器时引用的自定义网络。同一网络中的所有容器 运行 可以通过其 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
我更改了 Kibana 容器的网络配置,之后它工作正常:
我尝试创建 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来测试
此致
对于容器内的 运行 命令时 localhost
或 127.0.0.1
的含义存在一些误解。因为每个容器都有自己的网络,所以 localhost
不是您真正的主机系统,而是容器本身。因此,当您在 运行 kibana 并将 ELASTICSEARCH_URL
变量指向 localhost:9200
时,kibana 进程将在 kibana 容器内查找 elasticsearch,当然 运行 不在那里。
您已经引入了一些您在启动容器时引用的自定义网络。同一网络中的所有容器 运行 可以通过其 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
我更改了 Kibana 容器的网络配置,之后它工作正常: