Docker Healthchecks
Rationale
Use these to verify the health of database containers. This allows me to only run web services when a database is healthy. This prevents us from hiding a silent failure.
MariaDB
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
start_period: 10s
interval: 10s
timeout: 5s
retries: 3
MySQL
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 20s
retries: 10
Postgres
healthcheck:
test: ["CMD", "pg_isready", "-U", "<user>"]
interval: 30s
timeout: 20s
retries: 3
Web Services
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:3000/api/healthz | grep pass"]
interval: 1m
timeout: 2m
retries: 5
If the service has an HTTP endpoint and has the curl binary, use the above to create a healthcheck.
Use CMD-SHELL as the first token to be able to pipe output from curl to grep
Valkey
healthcheck:
test: ["CMD-SHELL", "valkey-cli ping | grep PONG"]
start_period: 20s
interval: 30s
retries: 5
timeout: 3s