[BUG: minor] devshard-gateway healthcheck uses curl, which the image does not contain → container permanently unhealthy #2085
Summary
deploy/join/docker-compose.devshard-gateway.yml defines the gateway healthcheck as
but the image it runs (devshardctl-runtime stage in devshard/Dockerfile) is alpine:3.23 with only ca-certificates wget installed — no curl. Every gateway started from the stock compose therefore reports unhealthy forever.
Observed
- testnet1 gateway (
devshard-gateway:testnet-v6-f5ad27a):docker ps→Up 8 days (unhealthy),FailingStreak=23034, health log:OCI runtime exec failed: exec: "curl": executable file not found in $PATH. The service itself answers/v1/statuswith 200. - Same for
ghcr.io/gonka-ai/devshard-gateway:mainnet-v0.2.15-v4.1andmainnet-v0.2.15-v4-latest(the compose default tag). - Present on every branch checked (
main,devshard-0.2.x-v6,devshard/v7,upgrade-v0.2.17). Reported internally on 2026-09-16; since thencbb20c196(Oct 7) ande2e7873a6(Oct 12) re-added the samecurlline.
Impact
Container health is always unhealthy, so depends_on: condition: service_healthy, orchestration restarts and health-based alerting are misled; operators cannot tell a broken gateway from a healthy one via docker ps.
Fix (either)
- compose:
test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://localhost:8080/v1/status"] - or Dockerfile:
RUN apk add --no-cache ca-certificates curlin thedevshardctl-runtimestage.
The same check should be applied to any other compose file that healthchecks a devshardctl-based container.
🔄 Auto-synced from Issue #2085 every hour.