build: Move the n8n and runners images onto n8nio/base:26.7.0 - #36990
Merged
Conversation
#36984 bumped the base image matrix to DHI's current Alpine 3.24 builds, so n8nio/base:26.5.1 is no longer rebuilt and receives no further patches. Point the images at base:26.7.0, published by that merge, and move the Node pin the image builds use to match. The -pc variant's node-pc pins in docker-build-push.yml stay on 26.5.1: the pointer-compressed image is built FROM n8nio/base, so node-pc:26.7.0 only exists once this merge triggers build-node-pc-image.yml. A follow-up bumps those two digests. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CharlieKolb
approved these changes
Aug 25, 2026
Contributor
PR review overviewBased on ownership of the 8 changed files in this PR:
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Contributor
There was a problem hiding this comment.
No issues found across 8 files
Architecture diagram
sequenceDiagram
participant CI as CI Workflow (.yml)
participant Script as dockerize-n8n.mjs
participant Registry as Docker Registry
participant Builder as Builder Stage (Node Alpine)
participant Runtime as Runtime Stage (n8nio/base)
Note over CI,Runtime: Docker Build Flow (n8n & Runners)
CI->>CI: CHANGED: Set NODE_VERSION=26.7.0
CI->>Script: Execute build with version context
Script->>Script: CHANGED: Resolve nodeVersion (default 26.7.0)
Script->>Registry: Pull BUILDER_IMAGE
Registry-->>Builder: CHANGED: node:26.7.0-alpine3.24 (Pinned Digest)
Script->>Registry: Pull RUNTIME_IMAGE
Registry-->>Runtime: CHANGED: n8nio/base:26.7.0 (Pinned Digest)
Note over Builder,Runtime: Build Execution Phase
Builder->>Builder: Compile native bindings (sqlite3, isolated-vm, etc.)
Builder->>Runtime: NEW: Copy native bindings to runtime stage
Note over Builder,Runtime: Node ABI compatibility requires matching versions
alt Image Variant: node-pc
Note over Builder,Runtime: Stage uses internal overrides
Builder->>Runtime: Remains on 26.5.1 (internally consistent)
else Standard Image (n8n/runners)
Runtime->>Runtime: Finalize image with Node 26.7.0
end
Runtime-->>CI: Build Complete (Multi-arch index)
Note over CI,Registry: Smoke Test Phase
CI->>Registry: NEW: docker run n8nio/base:26.7.0
Registry-->>CI: Verify node -v (26.7.0) and GraphicsMagick stats
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
#36984 bumped the base image matrix to DHI's current Alpine 3.24 builds, so
n8nio/base:26.5.1is no longer rebuilt and receives no further patches. This points the images atbase:26.7.0— published by that merge — and moves the Node pin the image builds use so it matches the runtime.docker/images/n8n/Dockerfile:RUNTIME_IMAGE→n8nio/base:26.7.0,BUILDER_IMAGE→node:26.7.0-alpine3.24, both digest-pinned to multi-arch indexes.docker/images/node-pc/Dockerfile: runtime stage →base:26.7.0.runners/Dockerfile,runners/Dockerfile.distroless,dockerize-n8n.mjs, and theNODE_VERSIONenv indocker-build-push.yml/docker-build-smoke.yml/build-node-pc-image.yml.Keeping
BUILDER_IMAGEandRUNTIME_IMAGEon the same Node matters here: the image copies native bindings (isolated-vm, sqlite3, kafka) from the builder stage into the runtime.Deliberately left behind
docker-build-push.ymlstill pinsn8nio/node-pc:26.5.1/:26.5.1-devfor the-pcvariant. That image is builtFROM n8nio/base, sonode-pc:26.7.0only exists once this merge triggersbuild-node-pc-image.yml. A follow-up bumps those two digests — same chicken-and-egg as the base itself.This is harmless in the meantime:
NODE_VERSIONis declared inn8n/Dockerfilebut never referenced, and the-pcbuild overrides bothBUILDER_IMAGEandRUNTIME_IMAGEexplicitly, so the-pcvariant stays internally consistent on 26.5.1.Also unchanged:
setup-nodejs's default and theci-mastertest matrix still say 26.5.1. Those govern which Node runs unit tests and linting, not what goes into an image, so bumping them is a separate risk surface.How to test
Docker Build Smoke Testruns on this PR and exercises the whole chain, including a from-scratch base build.Locally:
I verified the published
base:26.7.0reportsv26.7.0with/bin/sh→ busybox, GraphicsMagick and tini intact, and that the newBUILDER_IMAGEresolves its apk toolchain (python3/make/g++) on both architectures.Related Linear tickets, Github issues, and Community forum posts
https://linear.app/n8n/issue/DEVP-869