store: Fix: Docker healthcheck - use node -e when container lacks wget/curl

This commit is contained in:
Cal Corum 2026-02-20 11:09:36 -06:00
parent 87b02587a6
commit 21cc5e391b

View File

@ -0,0 +1,37 @@
---
id: e9abb352-ae92-4714-9b07-5ee6568953d5
type: fix
title: "Fix: Docker healthcheck - use node -e when container lacks wget/curl"
tags: [docker, healthcheck, troubleshooting, homelab, nodejs, fix]
importance: 0.6
confidence: 0.8
created: "2026-02-20T17:09:36.080059+00:00"
updated: "2026-02-20T17:09:36.080059+00:00"
---
# Fix: Docker Healthcheck Binary Missing in Container Image
## Problem
A Docker container (Termix, `ghcr.io/lukegus/termix:latest`) was perpetually unhealthy. The `HEALTHCHECK` directive used `wget`, but the image had neither `wget` nor `curl` installed.
## Diagnosis
When a container is stuck in `unhealthy` state, verify the binary used in the `HEALTHCHECK` actually exists in the image.
## Fix
Replace the `wget`-based healthcheck with one using the app runtime (Node.js in this case):
```yaml
healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://localhost:PORT', r => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"]
interval: 30s
timeout: 10s
retries: 3
```
Replace `PORT` with the actual port the app listens on.
## Important
- `docker compose restart` does NOT pick up compose file changes — must run `docker compose up -d` to recreate the container.
## General Pattern
For Node.js apps without curl/wget, use the Node.js HTTP module directly in the healthcheck. Adapts to any language runtime available in the image (python3 -c, etc.).