docker-compose.yml用于elasticsearch和kibana

我的目标是从本地使用Docker获得DockerHub的elasticsearch和kibana图像。

这个诀窍,完美的作品…

docker network create mynetwork --driver=bridge docker run -p 5601:5601 --name kibana -d --network mynetwork kibana docker run -p 9200:9200 -p 9300:9300 --name elasticsearch -d --network mynetwork elasticsearch 

今天,一只鸟在我耳边低语,说我应该学习docker写作。 所以我试图做一个docker-compose.yml里面的所有东西。

这是我的尝试。

 version: "2.0" services: elasticsearch: image: elasticsearch:latest ports: - "9200:9200" - "9300:9300" networks: - docker_elk kibana: image: kibana:latest ports: - "5601:5601" networks: - docker_elk networks: docker_elk: driver: bridge 

不幸的是,这是行不通的。 我一直在绞尽脑汁,为什么我总是遇到ECONNREFUSED错误,如下图所示,当我运行docker-compse。

 $ docker-compose up Starting training_elasticsearch_1 Recreating training_kibana_1 Attaching to training_elasticsearch_1, training_kibana_1 elasticsearch_1 | [2016-11-02 22:39:55,798][WARN ][bootstrap ] unable to install syscall filter: seccomp unavailable: your kernel is buggy and you should upgrade elasticsearch_1 | [2016-11-02 22:39:56,036][INFO ][node ] [Caliban] version[2.4.1], pid[1], build[c67dc32/2016-09-27T18:57:55Z] elasticsearch_1 | [2016-11-02 22:39:56,036][INFO ][node ] [Caliban] initializing ... elasticsearch_1 | [2016-11-02 22:39:56,713][INFO ][plugins ] [Caliban] modules [reindex, lang-expression, lang-groovy], plugins [], sites [] elasticsearch_1 | [2016-11-02 22:39:56,749][INFO ][env ] [Caliban] using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/vda2)]], net usable_space [54.8gb], net total_space [59gb], spins? [possibly], types [ext4] elasticsearch_1 | [2016-11-02 22:39:56,749][INFO ][env ] [Caliban] heap size [990.7mb], compressed ordinary object pointers [true] kibana_1 | {"type":"log","@timestamp":"2016-11-02T22:39:58Z","tags":["status","plugin:kibana@1.0.0","info"],"pid":11,"state":"green","message":"Status changed from uninitialized to green - Ready","prevState":"uninitialized","prevMsg":"uninitialized"} kibana_1 | {"type":"log","@timestamp":"2016-11-02T22:39:58Z","tags":["status","plugin:elasticsearch@1.0.0","info"],"pid":11,"state":"yellow","message":"Status changed from uninitialized to yellow - Waiting for Elasticsearch","prevState":"uninitialized","prevMsg":"uninitialized"} kibana_1 | {"type":"log","@timestamp":"2016-11-02T22:39:58Z","tags":["error","elasticsearch"],"pid":11,"message":"Request error, retrying -- connect ECONNREFUSED 172.20.0.2:9200"} kibana_1 | {"type":"log","@timestamp":"2016-11-02T22:39:58Z","tags":["status","plugin:kbn_vislib_vis_types@1.0.0","info"],"pid":11,"state":"green","message":"Status changed from uninitialized to green - Ready","prevState":"uninitialized","prevMsg":"uninitialized"} kibana_1 | {"type":"log","@timestamp":"2016-11-02T22:39:58Z","tags":["warning","elasticsearch"],"pid":11,"message":"Unable to revive connection: http://elasticsearch:9200/"} kibana_1 | {"type":"log","@timestamp":"2016-11-02T22:39:58Z","tags":["warning","elasticsearch"],"pid":11,"message":"No living connections"} kibana_1 | {"type":"log","@timestamp":"2016-11-02T22:39:58Z","tags":["status","plugin:elasticsearch@1.0.0","error"],"pid":11,"state":"red","message":"Status changed from yellow to red - Unable to connect to Elasticsearch at http://elasticsearch:9200.","prevState":"yellow","prevMsg":"Waiting for Elasticsearch"} kibana_1 | {"type":"log","@timestamp":"2016-11-02T22:39:58Z","tags":["status","plugin:markdown_vis@1.0.0","info"],"pid":11,"state":"green","message":"Status changed from uninitialized to green - Ready","prevState":"uninitialized","prevMsg":"uninitialized"} kibana_1 | {"type":"log","@timestamp":"2016-11-02T22:39:58Z","tags":["status","plugin:metric_vis@1.0.0","info"],"pid":11,"state":"green","message":"Status changed from uninitialized to green - Ready","prevState":"uninitialized","prevMsg":"uninitialized"} kibana_1 | {"type":"log","@timestamp":"2016-11-02T22:39:58Z","tags":["status","plugin:spyModes@1.0.0","info"],"pid":11,"state":"green","message":"Status changed from uninitialized to green - Ready","prevState":"uninitialized","prevMsg":"uninitialized"} kibana_1 | {"type":"log","@timestamp":"2016-11-02T22:39:58Z","tags":["status","plugin:statusPage@1.0.0","info"],"pid":11,"state":"green","message":"Status changed from uninitialized to green - Ready","prevState":"uninitialized","prevMsg":"uninitialized"} kibana_1 | {"type":"log","@timestamp":"2016-11-02T22:39:58Z","tags":["status","plugin:table_vis@1.0.0","info"],"pid":11,"state":"green","message":"Status changed from uninitialized to green - Ready","prevState":"uninitialized","prevMsg":"uninitialized"} kibana_1 | {"type":"log","@timestamp":"2016-11-02T22:39:58Z","tags":["listening","info"],"pid":11,"message":"Server running at http://0.0.0.0:5601"} elasticsearch_1 | [2016-11-02 22:39:58,515][INFO ][node ] [Caliban] initialized elasticsearch_1 | [2016-11-02 22:39:58,515][INFO ][node ] [Caliban] starting ... elasticsearch_1 | [2016-11-02 22:39:58,587][INFO ][transport ] [Caliban] publish_address {172.20.0.2:9300}, bound_addresses {[::]:9300} elasticsearch_1 | [2016-11-02 22:39:58,594][INFO ][discovery ] [Caliban] elasticsearch/1Cf9qz7CSCqHBEEuwG7PQw kibana_1 | {"type":"log","@timestamp":"2016-11-02T22:40:00Z","tags":["warning","elasticsearch"],"pid":11,"message":"Unable to revive connection: http://elasticsearch:9200/"} kibana_1 | {"type":"log","@timestamp":"2016-11-02T22:40:00Z","tags":["warning","elasticsearch"],"pid":11,"message":"No living connections"} elasticsearch_1 | [2016-11-02 22:40:01,650][INFO ][cluster.service ] [Caliban] new_master {Caliban}{1Cf9qz7CSCqHBEEuwG7PQw}{172.20.0.2}{172.20.0.2:9300}, reason: zen-disco-join(elected_as_master, [0] joins received) elasticsearch_1 | [2016-11-02 22:40:01,661][INFO ][http ] [Caliban] publish_address {172.20.0.2:9200}, bound_addresses {[::]:9200} elasticsearch_1 | [2016-11-02 22:40:01,661][INFO ][node ] [Caliban] started elasticsearch_1 | [2016-11-02 22:40:01,798][INFO ][gateway ] [Caliban] recovered [1] indices into cluster_state elasticsearch_1 | [2016-11-02 22:40:02,149][INFO ][cluster.routing.allocation] [Caliban] Cluster health status changed from [RED] to [YELLOW] (reason: [shards started [[.kibana][0]] ...]). kibana_1 | {"type":"log","@timestamp":"2016-11-02T22:40:03Z","tags":["status","plugin:elasticsearch@1.0.0","info"],"pid":11,"state":"green","message":"Status changed from red to green - Kibana index ready","prevState":"red","prevMsg":"Unable to connect to Elasticsearch at http://elasticsearch:9200."} ^CGracefully stopping... (press Ctrl+C again to force) Stopping training_kibana_1 ... done Stopping training_elasticsearch_1 ... done 

有人可以帮助我为什么?

谢谢

为了增加对kibana弹性search的依赖,你需要设置depends_onvariables,如下所示。 另外,要添加到@Phil McMillan的答案,您可以设置在kibana elasticsearch_urlvariables, 没有静态寻址使用Docker的内置DNS机制 。

 version: '2.1' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:5.4.3 container_name: elasticsearch networks: docker-elk: kibana: image: docker.elastic.co/kibana/kibana:5.4.3 container_name: kibana environment: - "ELASTICSEARCH_URL=http://elasticsearch:9200" networks: - docker-elk depends_on: - elasticsearch networks: docker-elk: driver: bridge 

注意环境variablesELASTICSEARCH_URL = http:// elasticsearch :9200只是使用了具有Docker DNS服务器能够parsing的容器名称(elasticsearch)。

您需要包含links

 version: "2.0" services: elasticsearch: image: elasticsearch:latest ports: - "9200:9200" - "9300:9300" networks: - docker_elk kibana: image: kibana:latest ports: - "5601:5601" links: - elasticsearch networks: - docker_elk networks: docker_elk: driver: bridge 

更新

当使用图像elasticsearch:latest ,它是Elasticsearch 5.0并要求我们增加我们的Docker主机虚拟内存。

在运行docker-compose之前,请确保在Docker主机上运行此命令。

Linux的:

 su root sysctl -w vm.max_map_count=262144 

Windows(boot2docker)

 docker-machine ssh default sudo sysctl -w vm.max_map_count=262144 

如果您不想更改您的Docker主机,只需在elasticsearch上使用Elasticsearch 2.x镜像elasticsearch:2

我有这个工作。 在kibana之前,不需要任何链接,它与elasticsearch没有任何关系。 问题在于,在撰写时,使用自己的一组IP来定义新的桥接networking。 Kibana需要通过这个桥接networking与集群通信 – “localhost”不再可用于连接。

你需要做一些事情:

  1. 您需要在kibana.yml中或在撰写文件中的kibana环境下设置一些值:

一个。 必须将kibana.yml中的elasticsearch.url(或组成文件中环境下的kibana部分下的ELASTICSEARCH_URL)设置为群集的特定IP,并且端口9200 – localhost将无法正常工作,因为它在运行之外。

 elasticsearch.url: "http://172.16.238.10:9200" 

湾 您还需要将server.host(SERVER_HOST)设置为Kibana容器的桥接IP。

 server.host: "172.16.238.12" 

注意:你仍然可以从http://127.0.0.1:5601访问kibana UI,你仍然需要这些“ports”命令!

  1. 您需要在桥接networking下设置“ipam”configuration并分配elasticsearch和kibana静态IP,以便kibana可以通过上面的configuration访问它。

像这样的东西应该足够了:

 elasticsearch: networks: esnet: ipv4_address: 172.16.238.10 kibana: networks: esnet: ipv4_address: 172.16.238.12 networks: esnet: driver: bridge ipam: driver: default config: - subnet: 172.16.238.0/24 

不要忘记使用logging的方法之一来设置Kibanaconfiguration – 需要设置ELASTICSEARCH_URL!

我有一个泊坞窗撰写文件,创build两个elasticsearch节点和一个kibana实例都运行在相同的桥接networking。 有可能的。