Summary
In supabase/code/docker-compose.yml (branch main), two services run without any healthcheck:
rest → postgrest/postgrest:v12.2.12
functions → supabase/edge-runtime:v1.67.4
kong and meta also omit a Compose-level healthcheck, but their images ship a HEALTHCHECK, so Docker still reports them as healthy. rest and functions have none at either level.
Why it matters
EasyPanel aggregates per-container health into a single status for the Compose service. A container with no healthcheck is reported by Docker as plain Up (no health state), so EasyPanel keeps the whole service grey and never turns it green, even when everything is fully working. Operationally you cannot tell "no check defined" from "actually down".
Verified on a running deployment (EasyPanel on Docker Swarm):
$ docker ps --format 'table {{.Names}}\t{{.Status}}' | grep supabase
...-rest-1 Up 15 hours
...-functions-1 Up 15 hours
...(other 11) Up 15 hours (healthy)
Proposed fix
functions (supabase/edge-runtime) — the image ships bash and the runtime listens on :9000 (the port Kong proxies /functions/v1 to). A dependency-free TCP check works:
healthcheck:
test: [ "CMD", "bash", "-c", "exec 3<>/dev/tcp/127.0.0.1/9000" ]
interval: 10s
timeout: 5s
retries: 3
start_period: 20s
rest (postgrest/postgrest) — this image is distroless (no sh/bash/curl/wget), so a standard CMD/CMD-SHELL check cannot run inside it. PostgREST exposes a built-in admin server with /live and /ready when PGRST_ADMIN_SERVER_PORT is set, but there is no in-image tool to query it. Options: mount a tiny static healthcheck helper, document the limitation, or rely on the upstream PostgREST image gaining a HEALTHCHECK.
Happy to send a PR with the functions fix.
Notes
The same gap exists upstream in supabase/supabase (docker/docker-compose.yml); also reporting it there.
Summary
In
supabase/code/docker-compose.yml(branchmain), two services run without anyhealthcheck:rest→postgrest/postgrest:v12.2.12functions→supabase/edge-runtime:v1.67.4kongandmetaalso omit a Compose-level healthcheck, but their images ship aHEALTHCHECK, so Docker still reports them ashealthy.restandfunctionshave none at either level.Why it matters
EasyPanel aggregates per-container health into a single status for the Compose service. A container with no healthcheck is reported by Docker as plain
Up(no health state), so EasyPanel keeps the whole service grey and never turns it green, even when everything is fully working. Operationally you cannot tell "no check defined" from "actually down".Verified on a running deployment (EasyPanel on Docker Swarm):
Proposed fix
functions (
supabase/edge-runtime) — the image shipsbashand the runtime listens on:9000(the port Kong proxies/functions/v1to). A dependency-free TCP check works:rest (
postgrest/postgrest) — this image is distroless (nosh/bash/curl/wget), so a standardCMD/CMD-SHELLcheck cannot run inside it. PostgREST exposes a built-in admin server with/liveand/readywhenPGRST_ADMIN_SERVER_PORTis set, but there is no in-image tool to query it. Options: mount a tiny static healthcheck helper, document the limitation, or rely on the upstream PostgREST image gaining aHEALTHCHECK.Happy to send a PR with the
functionsfix.Notes
The same gap exists upstream in
supabase/supabase(docker/docker-compose.yml); also reporting it there.