环境描述
操作系统: CentOS 7.x
Docker版本: 20.10.3
docker-compose版本: 1.18.0
意图使用docker-compose部署完整的一套ES集群,包括cerebro和Kibana,yml文件如下:
version: '2.2'
services:
cerebro:
image: lmenezes/cerebro:0.9.3
container_name: cerebro
ports:
- "9000:9000"
command:
- -Dhosts.0.host=http://elasticsearch:9200
networks:
- elk
kibana:
image: docker.elastic.co/kibana/kibana:7.10.2
container_name: kibana7
environment:
- I18N_LOCALE=zh-CN
- XPACK_GRAPH_ENABLED=true
- TIMELION_ENABLED=true
- XPACK_MONITORING_COLLECTION_ENABLED="true"
ports:
- "5601:5601"
networks:
- elk
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2-amd64
container_name: es01
environment:
- cluster.name=escluster
- node.name=es01
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms4096m -Xmx4096m"
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es7data1:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elk
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2-amd64
container_name: es02
environment:
- cluster.name=escluster
- node.name=es02
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms4096m -Xmx4096m"
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es7data2:/usr/share/elasticsearch/data
networks:
- elk
volumes:
es7data1:
driver: local
es7data2:
driver: local
networks:
elk:
driver: bridge
问题描述
当执行docker-compose
后,访问9200端口正常,访问cerebro的9000端口和kibana的5601端口均不正常,具体表现为:
- 访问cerebro后,连接ES集群提示连接被拒绝"connection refused"
- 访问kibana,页面显示为“kibana notready yet”
问题调查
分别查看日志,cerebro日志中显示cerebro访问http://elasticsearch:9200为connection refused,kibana中显示Unable to revive connection: http://elasticsearch:9200/
,回头查看yml文件内容,发现kibana访问的ES地址为默认的elasticsearch
,无法得知真实的ES地址,cerebro同理
问题修复
将yml文件中的-Dhosts.0.host=http://elasticsearch:9200
修改为-Dhosts.0.host=http://172.17.0.1:9200
,kibana的environment
添加一行- ELASTICSEARCH_HOSTS=http://172.17.0.1:9200
,其中172.17.0.1
为docker0网卡的IP地址,重新执行docker-compose up -d
命令后一切正常。