-
fix(controller): stop the controller's own environment from pinning the image
Release / version (push) Canceled after 0sRelease / frontend (push) Canceled after 0sRelease / linux (amd64) (push) Canceled after 0sRelease / linux (arm64) (push) Canceled after 0sRelease / windows (push) Canceled after 0sRelease / macos (push) Canceled after 0sRelease / release (push) Canceled after 0sBuild and Push Docker Image / build-and-push (push) Canceled after 0sreleased this
2026-09-06 11:11:02 +03:00 | 65 commits to main since this releaseA beta node could not leave :latest. Every Update reported "pulled and
recreated", desired-state asked for :beta, the stack .env said :beta — and
the container came back on :latest, three generations in a row.Compose resolves ${NODE_STATS_IMAGE} from the PROCESS environment before the
stack .env. Yesterday's8b0ac17handed the controller NODE_STATS_IMAGE in its
compose environment (so helpers could run the node's own image). That value
is baked in when the controller container is created, and the controller
runsdocker composefrom inside itself — so it wrote :beta to .env and
immediately shadowed it with the :latest it was born with. Only the app
service is recreated on update, never the controller, so the stale value
outlived every channel switch: the node was pinned to whatever image it
first ran.Two changes, either of which alone fixes it:
- the generated compose no longer gives the controller NODE_STATS_IMAGE at
all; it learns its own image by asking the daemon (selfImage), which is
always current and needs no variable; - the controller strips NODE_STATS_IMAGE from the environment it invokes
compose with, so the .env it maintains is the single source of truth
even for a controller created from an older compose.
The stand did not catch this because .env and the environment carried the
same local tag — the shadow only shows when the channel changes after the
controller exists. Reproduced from the affected node's live state.Co-Authored-By: Claude Fable 5.1 noreply@anthropic.com
Downloads
- the generated compose no longer gives the controller NODE_STATS_IMAGE at