From 43c7c08673b7bd7c53e3f5dbf9b89b16f3c4fda8 Mon Sep 17 00:00:00 2001 From: Vuong Hoang Date: Mon, 27 Apr 2026 23:18:02 -0700 Subject: [PATCH] stacks/fish-s2: build with target=server (multi-stage Dockerfile, default builds webui-only) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fourth fish-s2 attempt got past build + checkpoints, then container crashlooped silently again. Diagnosis: the upstream docker/Dockerfile is multi-stage with `webui` and `server` targets; without specifying a target, docker builds the LAST stage (webui — gradio-only, no start_server.sh, no API server). start_server.sh is the entrypoint script that lives only in the `server` stage. Confirmed by `cat /app/start_server.sh` inside the built image: "No such file or directory." Upstream's compose.yml uses target: server on its server service — doing the same here. --- stacks/fish-s2/compose.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/stacks/fish-s2/compose.yaml b/stacks/fish-s2/compose.yaml index 04167cf..2cd8118 100644 --- a/stacks/fish-s2/compose.yaml +++ b/stacks/fish-s2/compose.yaml @@ -34,6 +34,11 @@ services: # 403s on anonymous pulls. Build from source via docker/Dockerfile # instead. dockerfile: docker/Dockerfile + # Multi-stage Dockerfile — `server` stage installs start_server.sh + # and exposes the API. The default last stage is `webui` (gradio + # only), which crashloops silently because start_server.sh isn't + # there. Target=server is what upstream's compose.yml does. + target: server args: # Build args mirror upstream compose.base.yml defaults. # CUDA_VER 12.9 + UV_EXTRA cu129 = the CUDA 12.9 PyTorch wheels.