I'm trying to understand how the healthcheck
works but I'm having a hard time figuring it out. Here is an example docker-compose.yml
file:
version: "3.8"
services:
kibana_setup:
image: docker.elastic.co/kibana/kibana:8.7.1
labels:
co.elastic.logs/module: kibana
volumes:
- ./keystore:/usr/share/kibana/keystore
user: "0"
command: >
bash -c 'echo hello > /usr/share/kibana/keystore/kibana.keystore;'
healthcheck:
test: ["CMD-SHELL", "[ -f /usr/share/kibana/keystore/kibana.keystore ]"]
interval: 1s
timeout: 5s
retries: 240
hello_world:
depends_on:
kibana_setup:
condition: service_healthy
image: hello-world
When I run the command docker-compose up --build -d
, I see this output:
[+] Running 3/3
✔ Network test_default Created 0.3s
✘ Container test-kibana_setup-1 Error 0.0s
✔ Container test-hello_world-1 Created 0.0s
dependency failed to start: container test-kibana_setup-1 exited (0)
And I noticed on my host machine, a file ./keystore/kibana.keystore
was made with the word hello
in it.
I don't understand why the test-kibana_setup-1
container failed? The healthcheck
should have returned true
because ./keystore/kibana.keystore
does exist.
The command docker logs test-kibana_setup-1
also shows nothing.
Have I misunderstood how healthchecks work?
The container is exiting before the health check runs.
I added a tail to this to demonstrate the idea working:
services:
test:
image: alpine
command:
- /bin/sh
- -c
- |
echo hello > /usr/share/test.txt
tail -f /dev/null
healthcheck:
test: ["CMD-SHELL", "[ -f /usr/share/test.txt ]"]
hello_world:
depends_on:
test:
condition: service_healthy
image: hello-world