关于在容器内运行命令时的含义
localhost或
127.0.0.1含义存在一些误解。因为每个容器都有自己的网络,所以
localhost它不是您真正的主机系统,而是容器本身。因此,当您运行kibana并将
ELASTICSEARCH_URL变量指向
localhost:9200kibana进程时,将在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



