Elasticsearch healthcheck on docker-compose stops any dependent services because the container is always unhealthy. I see this when I run docker ps -a --format "table {{.Names}}t{{.Image}}t{{.Status}}"
NAMES IMAGE STATUS
elasticsearch elasticsearch:7.12.1 Up 26 seconds (unhealthy)
I am attempting to start metricbeat such that elasticsearch, kibana and logstash are started:
metricbeat:
image: elastic/metricbeat:7.12.1
user: root
depends_on:
elasticsearch:
condition: service_healthy
kibana:
condition: service_healthy
logstash:
condition: service_healthy
redis:
condition: service_healthy
How can I ensure that the elasticsearch (and other containers are healthy) and allow for metricbeat to start with all the resources available?
I would avoid creating a Docker image for any of these unless absolutely required.
My docker-compose configuration looks like this:
version: '3.7'
services:
elasticsearch:
# specifying discovery.type='single-node' bypasses bootstrapping checks.
image: elasticsearch:7.12.1
container_name: elasticsearch
healthcheck:
test: [ "CMD", "curl", "--fail" , "http://elasticsearch:9200/_cluster/health?wait_for_status=green&timeout=1s", "||", "exit", "1" ]
interval: 5s
timeout: 3s
volumes:
- elasticsearch-data:/usr/share/elasticsearch/data
networks:
- elastic
ports:
- 9200:9200
- 9300:9300
labels:
co.elastic.metrics/module: "elasticsearch"
co.elastic.metrics/hosts: "http://elasticsearch:9200"
co.elastic.metrics/metricsets: "node_stats,node"
co.elastic.metrics/xpack.enabled: "true"
environment:
- node.name=elasticsearch
- cluster.name=cluster-7
- discovery.type=single-node
- 'ES_JAVA_OPTS=-Xms512m -Xmx512m'
- xpack.monitoring.enabled=true
- xpack.monitoring.elasticsearch.collection.enabled=true
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
cap_add:
- IPC_LOCK
2
Answers
For d-c file ver. 3.7 i use this construction:
The approach can be different depending on elastic version. Also you need to use something else if you use OpenSearch they have bit different output for health (but just for info)
I`m adding what I use in my docker-compose
or