关于什么有一些误解
localhost
或
127.0.0.1
指在容器内运行命令时。因为每个容器都有自己的网络,
本地服务器
不是真正的主机系统,而是容器本身。所以当你运行kibana并指向
ELASTICSEARCH_URL
变量到
localhost:9200
kibana进程将在kibana容器中查找elasticsearch,当然,它并没有在那里运行。
您已经引入了一些在启动容器时引用的自定义网络。在同一网络中运行的所有容器都可以通过其上的名称相互引用
expose
d端口(请参阅停靠文件)。当你命名你的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