Elasticsearch 5.1和Docker – 如何正确configurationnetworking以便从主机到达Elasticsearch

使用Docker公共库中的Elasticsearch:latest(v5.1),我创build了自己的包含Cerebro的映像。 我现在试图让Elasticsearchnetworking正确configuration,以便我可以连接到Cerebro的Elasticsearch。 运行在我创build的容器内的Cerebro,在我的主机上正确呈现: http:// localhost:9000 。

提交我的图像后,我创build了以下的Docker容器:

sudo docker run -d -it --privileged --name es5.1 --restart=always \ -p 9200:9200 \ -p 9300:9300 \ -p 9000:9000 \ -v ~/elasticsearch/5.1/config:/usr/share/elasticsearch/config \ -v ~/elasticsearch/5.1/data:/usr/share/elasticsearch/data \ -v ~/elasticsearch/5.1/cerebro/conf:/root/cerebro-0.4.2/conf \ elasticsearch_cerebro:5.1 \ /root/cerebro-0.4.2/bin/cerebro 

我在〜/ elasticsearch / 5.1 / config中的elasticsearch.yml目前有以下networking和发现条目:

 network.publish_host: 192.168.1.26 discovery.zen.ping.unicast.hosts: ["192.168.1.26:9300"] 

我也试过0.0.0.0,并没有指定这些设置的默认值到环回。 另外,我试过用值的组合来指定network.host。 无论我如何设置,elasticsearch在启动时login:

 [info] play.api.Play - Application started (Prod) [info] pcsNettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000 [error] pcsnPlayDefaultUpstreamHandler - Cannot invoke the action java.net.ConnectException: Connection refused: localhost/127.0.0.1:9200 … cascading errors because of this connection refusal... 

无论如何设置elasticsearch.ymlnetworking,Elasticsearch启动时的错误消息都不会改变。 我validation了在Docker容器内拾取elasticsearch.yml。 请让我知道我错了这个configuration。

那么看起来好像我在经过了数天的战斗之后回答了我自己的问题!问题是弹性search并没有在容器内部开始,为了确定这个问题,我得到了一个terminal进入容器:

 docker exec -it es5.1 bash 

一旦进入容器,我检查了服务状态:

 service elasticsearch status 

为此,操作系统回应:

[失败] elasticsearch没有运行…失败!

我开始与它:

 service elasticsearch start 

我添加一个脚本,我会从docker运行调用来启动elasticsearch和cerebro,应该做的伎俩。 不过,我仍然想听听是否有更好的方法来configuration它。

我做了一个github docker-compose repo,它将启动elasticsearch,kibana,logstash,cerebro cluster

https://github.com/Shuliyey/elkc

================================================== ======================

另一方面,关于实际问题(elasticsearch_cerebro不起作用)。

在一个docker集装箱进行弹性研究和脑力劳动。 需要使用主pipe

https://docs.docker.com/engine/admin/using_supervisord/

将更新更多的细节

根本不需要使用主pipe。 解决这个问题的一个非常简单的方法是使用docker-compose并将Elasticsearch和Cerebro捆绑在一起,如下所示:

泊坞窗,compose.yml:

 version: '2' services: elasticsearch: build: elasticsearch volumes: - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ./elasticsearch/data:/usr/share/elasticsearch/data ports: - "9200:9200" - "9300:9300" environment: ES_JAVA_OPTS: "-Xmx1500m -Xms1500m" networks: - elk cerebro: build: cerebro volumes: - ./cerebro/config/application.conf:/opt/cerebro/conf/application.conf ports: - "9000:9000" networks: - elk depends_on: - elasticsearch networks: elk: driver: bridge 

elasticsearch / Dockerfile:

 FROM docker.elastic.co/elasticsearch/elasticsearch:5.5.1 

脑/ Dockerfile:

 FROM yannart/cerebro 

然后运行docker-compose builddocker-compose up 。 当一切开始时,您可以通过http:// localhost:9200和Cerebro的http:// localhost:9000访问ES