Skip to content

fix(ui): listen on 8080 to match the UI image's own port - #17

Merged
aboutte merged 1 commit into
devfrom
fix/ui-nginx-port-8080
Sep 29, 2026
Merged

aboutte merged 1 commit into
devfrom
fix/ui-nginx-port-8080

Conversation

@aboutte

@aboutte aboutte commented Sep 28, 2026 •

Copy link
Copy Markdown
Collaborator

Why

The UI image serves on 8080, and its baked-in healthcheck probes http://127.0.0.1:8080/. devkit mounts its own nginx/default.conf over the image's server block, and that conf listened on 80.

To be precise about the failure mode, since an earlier version of this PR got it wrong: nginx does bind 80 successfully even as UID 65532 — Docker sets ip_unprivileged_port_start=0, so there are no privileged ports in a container. The SPA serves fine. What breaks is only the healthcheck, which finds nothing on 8080:

healthcheck: http://127.0.0.1:8080/ failed: dial tcp 127.0.0.1:8080: connect: connection refused

So duplo-ui has sat permanently (unhealthy) for every UI tag published since the image moved to 8080 — including the UI_TAG currently in .env.example. Nothing in the compose file gates on duplo-ui's health, so serving was never affected. The cost is a status that misreports, plus a conf mount that masks the port the image actually uses.

What

  • nginx/default.conf: listen 80 → listen 8080 (+ comment)
  • docker-compose.yml: "${UI_PORT:-4200}:80" → "${UI_PORT:-4200}:8080"

localhost:${UI_PORT} is unchanged from the user's perspective.

Verified

Pre-fix, current UI_TAG, listen 80: binds 80, curl → 200, container → (unhealthy), failing streak 3.

Post-fix:

devkit-duplo-ui-1 Up 20 seconds (healthy) 0.0.0.0:4210->8080/tcp
localhost:4210 -> 200

Independent of the stuck cluster release — that still needs its own rollback decision.

🤖 Generated with Claude Code

@aboutte
aboutte requested a review from gk-duplo as a code owner September 28, 2026 17:50
The UI image serves on 8080 and its baked-in healthcheck probes
http://127.0.0.1:8080/. devkit mounts its own default.conf over the
image's server block, and that conf listened on 80 — so nginx bound 80,
the SPA served correctly, and the healthcheck got connection refused.
The container has sat permanently (unhealthy) for every UI tag
published since the image moved to 8080, including the UI_TAG in
.env.example.

Nothing gates on duplo-ui's health, so serving was never affected. The
cost is a status that misreports, and a conf mount that masks the port
the image actually uses — so exercising a UI tag in devkit says nothing
about how that image behaves where the port matters.

- nginx/default.conf: listen 8080
- docker-compose.yml: map ${UI_PORT:-4200} to 8080

localhost:${UI_PORT} is unchanged from the user's side.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@aboutte
aboutte force-pushed the fix/ui-nginx-port-8080 branch from 4e000ed to e12ce21 Compare September 28, 2026 18:24
@aboutte aboutte changed the title fix(ui): listen on 8080 to match DHI-based UI image fix(ui): listen on 8080 to match the UI image's own port Sep 28, 2026
@aboutte
aboutte merged commit 330e7c3 into dev Sep 29, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant