From 977e9d3dd7a03048d0b345a7f75d2d8b15a2c9b9 Mon Sep 17 00:00:00 2001 From: ArthurErlich Date: Thu, 3 Sep 2026 20:08:58 +0200 Subject: [PATCH] fix(omniroute): healthcheck used python3, which the image doesn't have Confirmed live on the R9700: omniroute starts up fine ("[API Bridge] Listening on 0.0.0.0:20129") but docker reported it unhealthy forever - the healthcheck's python3 -c "..." command can never run (which python3 wget curl node found only node in the image), so it failed every single check regardless of actual app health. Switched to a node-based TCP-connect check on the same port instead of an HTTP GET against /healthz - OmniRoute's own Docker guide already treats a bare TCP probe as an acceptable liveness check, and this sidesteps needing to confirm /healthz's exact path/response shape on this image. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01VPZ6TogJiYxG8E4EQBB197 --- docker-compose.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index acb0871..4281c3c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -91,10 +91,15 @@ services: - "${OMNIROUTE_API_PORT:-20129}:${OMNIROUTE_API_PORT:-20129}" restart: unless-stopped networks: [ai-stack] + # ponytail: TCP-connect check, not an HTTP /healthz GET — the image has + # no python3/curl/wget (confirmed live, `which` found only node), and + # OmniRoute's own Docker guide already treats a bare TCP probe on this + # port as an acceptable liveness check, not just the HTTP one. Simpler + # and avoids depending on /healthz's exact path/response shape. healthcheck: test: - CMD-SHELL - - python3 -c "import urllib.request; urllib.request.urlopen('http://localhost:${OMNIROUTE_API_PORT:-20129}/healthz')" + - node -e "require('net').connect(${OMNIROUTE_API_PORT:-20129},'localhost').on('connect',function(){this.end();process.exit(0)}).on('error',()=>process.exit(1))" interval: 30s timeout: 10s retries: 3