Skip to content

upload-release: disable containerd image store to preserve gzip layer compression#15252

Merged
Mic92 merged 1 commit into
NixOS:masterfrom
obsidiansystems:fix-docker-compression
Feb 16, 2026
Merged

upload-release: disable containerd image store to preserve gzip layer compression#15252
Mic92 merged 1 commit into
NixOS:masterfrom
obsidiansystems:fix-docker-compression

Conversation

@amaanq
Copy link
Copy Markdown
Member

@amaanq amaanq commented Feb 16, 2026

Motivation

Docker 28+ defaults to the containerd image store, which pushes layers uncompressed instead of gzip. The GHA runner image updated Docker to 29.x (actions/runner-images#13633), causing the nixos/nix:2.33.3 image to balloon from 138 MB to 505 MB, with all 70 layers pushed as application/vnd.docker.image.rootfs.diff.tar instead of .tar.gzip. OCI clients that only support gzip (e.g. go-containerregistry, used by Concourse CI) fail with "gzip: invalid header".

This commit disables the containerd snapshotter in the release workflow before any Docker operations, restoring the classic storage driver that preserves gzip compression through the docker load / docker push pipeline.

Context

The Docker 29.x update to the containerd image store appears to have changed how docker push handles layer compression, as there's a similar breaking change in push behavior being tracked in moby/moby#51532. I ran a before/after comparison on an ubuntu-24.04 runner with Docker 29.x, which confirms the fix, that is, pushing the same Hydra-built nix:2.33.3 tarball goes from 505 MB uncompressed (diff.tar) to 138 MB gzip (diff.tar.gzip).


Add 👍 to pull requests you find important.

The Nix maintainer team uses a GitHub project board to schedule and track reviews.

… compression

Docker 28+ defaults to the containerd image store, which pushes layers
uncompressed instead of gzip. The GHA runner image updated Docker to
29.x (actions/runner-images#13633), causing the `nixos/nix:2.33.3`
image to balloon from 138 MB to 505 MB, with all 70 layers pushed as
`application/vnd.docker.image.rootfs.diff.tar` instead of `.tar.gzip`.
OCI clients that only support gzip (e.g. `go-containerregistry`, used
by Concourse CI) fail with "gzip: invalid header".

This commit disables the containerd snapshotter in the release workflow
before any Docker operations, restoring the classic storage driver that
preserves gzip compression through the `docker load` / `docker push`
pipeline.

Fixes NixOS#15246
@amaanq amaanq requested a review from edolstra as a code owner February 16, 2026 19:14
@xokdvium
Copy link
Copy Markdown
Contributor

Thanks a lot!

@xokdvium
Copy link
Copy Markdown
Contributor

For future readers, this is the same fix as described in https://www.ytyng.com/en/blog/docker-29-ecr-push-403-forbidden-containerd-image-store/

@xokdvium xokdvium added backport 2.29-maintenance Automatically creates a PR against the branch backport 2.30-maintenance Automatically creates a PR against the branch backport 2.31-maintenance Automatically creates a PR against the branch backport 2.32-maintenance Automatically creates a PR against the branch backport 2.33-maintenance Automatically creates a PR against the branch labels Feb 16, 2026
@Mic92 Mic92 added this pull request to the merge queue Feb 16, 2026
Merged via the queue into NixOS:master with commit 9745452 Feb 16, 2026
20 checks passed
@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.29-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.30-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.31-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.32-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.33-maintenance with exitcode 1

@xokdvium xokdvium added backport 2.29-maintenance Automatically creates a PR against the branch backport 2.30-maintenance Automatically creates a PR against the branch backport 2.31-maintenance Automatically creates a PR against the branch backport 2.32-maintenance Automatically creates a PR against the branch backport 2.33-maintenance Automatically creates a PR against the branch and removed backport 2.29-maintenance Automatically creates a PR against the branch backport 2.30-maintenance Automatically creates a PR against the branch backport 2.31-maintenance Automatically creates a PR against the branch backport 2.32-maintenance Automatically creates a PR against the branch backport 2.33-maintenance Automatically creates a PR against the branch labels Feb 16, 2026
@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.29-maintenance with exitcode 1

1 similar comment
@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.29-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.30-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.29-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.30-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.31-maintenance with exitcode 1

1 similar comment
@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.31-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.30-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.31-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.32-maintenance with exitcode 1

2 similar comments
@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.32-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.32-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.31-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.33-maintenance with exitcode 1

2 similar comments
@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.33-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.33-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.32-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.33-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.29-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.30-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.31-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.32-maintenance with exitcode 1

@internal-nix-ci
Copy link
Copy Markdown

Git push to origin failed for 2.33-maintenance with exitcode 1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport 2.29-maintenance Automatically creates a PR against the branch backport 2.30-maintenance Automatically creates a PR against the branch backport 2.31-maintenance Automatically creates a PR against the branch backport 2.32-maintenance Automatically creates a PR against the branch backport 2.33-maintenance Automatically creates a PR against the branch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Docker image 2.33.3: layers not gzip-compressed, breaking OCI clients

3 participants