Recently, we had an outage due to Redis being unable to write to a file system (not sure why it’s Amazon EFS) anyway I noted that there was no actual HEALTHCHECK set up for the Docker service to make sure it is running correctly, Redis is up so I can’t simply use nc -z
to check if the port is open.
Is there a command I can execute in the redis:6-alpine
(or non-alpine) image that I can put in the healthcheck
block of the docker-compose.yml
file.
Note I am looking for command that is available internally in the image. Not an external healthcheck.
4
Answers
Although the
ping
operation from @nitrin0 answer generally works. It does not handle the case where the write operation will actually fail. So instead I perform a change that will just increment a value to a key I don't plan to use.If I remember correctly that image includes
redis-cli
so, maybe, something along these lines:You can also add it inside the Dockerfile if your using a Redis image that contains the redis-cli:
Linux Docker
Windows Docker
I’ve just noticed that there is a phase in which redis is still starting up and loading data. In this phase,
redis-cli ping
shows the errorbut stills returns the exit code
0
, which would make redis already report has healthy.Also
redis-cli --raw incr ping
returns0
in this phase without actually incrementing this key successfully.As a workaround, I’m checking whether the
redis-cli ping
actually prints aPONG
, which it only does after the LOADING has been finished.This works because
grep
returns only0
when the string ("PONG") is found.