Skip to content

[ubuntu] Update docker to 29.1.5, compose to 2.40.3#13633

Merged
shamil-mubarakshin merged 1 commit intoactions:mainfrom
shamil-mubarakshin:ubuntu-update-docker-29.1
Feb 5, 2026
Merged

[ubuntu] Update docker to 29.1.5, compose to 2.40.3#13633
shamil-mubarakshin merged 1 commit intoactions:mainfrom
shamil-mubarakshin:ubuntu-update-docker-29.1

Conversation

@shamil-mubarakshin
Copy link
Copy Markdown
Contributor

Description

This PR updates docker and docker compose on ubuntu images:

  • docker is updated to 29.1.5
  • docker compose is updated to 2.40.3

Related issue: #13474

Check list

  • Related issue / work item is attached
  • Tests are written (if applicable)
  • Documentation is updated (if applicable)
  • Changes are tested and related VM images are successfully generated

@shamil-mubarakshin shamil-mubarakshin marked this pull request as ready for review February 5, 2026 16:54
Copilot AI review requested due to automatic review settings February 5, 2026 16:54
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates Docker and Docker Compose versions on Ubuntu 22.04 and Ubuntu 24.04 runner images to address issue #13474. The updates bring Docker from version 28.0.4 to 29.1.5 and Docker Compose from 2.38.2 to 2.40.3.

Changes:

  • Updated docker-ce and docker-ce-cli packages from version 28.0.4 to 29.1.5 in Ubuntu toolset files
  • Updated docker compose plugin from version 2.38.2 to 2.40.3 in Ubuntu toolset files

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
images/ubuntu/toolsets/toolset-2204.json Updated Docker and Docker Compose versions for Ubuntu 22.04
images/ubuntu/toolsets/toolset-2404.json Updated Docker and Docker Compose versions for Ubuntu 24.04

@shamil-mubarakshin shamil-mubarakshin merged commit c218bde into actions:main Feb 5, 2026
16 checks passed
@shamil-mubarakshin shamil-mubarakshin deleted the ubuntu-update-docker-29.1 branch February 5, 2026 17:45
dwydler pushed a commit to wydler/runner-images-hetzner-cloud that referenced this pull request Feb 6, 2026
dwydler added a commit to wydler/runner-images-hetzner-cloud that referenced this pull request Feb 6, 2026
@shepmaster
Copy link
Copy Markdown

This is a bit of a stab in the dark, but one of my jobs (using 29.1.5) now fails with a pretty strange error:

image with reference shepmaster/rust-stable:latest was found but does not provide any platform

The same job from the day before (with 28.0.4) seems fine.


The TL;DR of the job is that I build a docker image, push it to GHCR, then pull it back, re-tag it, and push it a second time to GHCR and Docker Hub. The error message suggests that somehow I've built an image that isn't linux/amd64, but if I pull the same image to my laptop I can run it as linux/amd64.

Do you have any gut feeling if this Docker update might not play well with GHCR or something?

amaanq added a commit to obsidiansystems/nix that referenced this pull request Feb 16, 2026
… compression

Docker 28+ defaults to the containerd image store, which changes layer
compression during `docker push`. 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 compressed, with layers pushed
as zstd or uncompressed instead of 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 added a commit to amaanq/nix that referenced this pull request Feb 16, 2026
… compression

Docker 28+ defaults to the containerd image store, which changes layer
compression during `docker push`. 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 compressed, with layers pushed
as zstd or uncompressed instead of 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 added a commit to amaanq/nix that referenced this pull request Feb 16, 2026
… compression

Docker 28+ defaults to the containerd image store, which changes layer
compression during `docker push`. 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 compressed, with layers pushed
as zstd or uncompressed instead of 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 added a commit to obsidiansystems/nix that referenced this pull request Feb 16, 2026
… 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 added a commit to amaanq/nix that referenced this pull request Feb 16, 2026
… 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
{
"package": "docker-ce-cli",
"version": "28.0.4"
"version": "29.1.5"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heads-up, Docker Engine 29.0.0 uses containerd as the default image store now.

containerd image store is now the default for fresh installs. This doesn't apply to daemons configured with userns-remap (see moby#47377).

-- 29.0.0 (2025-11-10), https://docs.docker.com/engine/release-notes/29/#2900*

This appears to cause behavioral changes with how local vs remote images are chosen. As experienced with our CI breaking, element-hq/synapse#19460 (comment)

To add onto containerd being the problem, previously another developer was experiencing the same problem locally and noticed containerd being the only difference with their setup (resolved after disabling), see element-hq/synapse#18210 (comment)

I'm guessing this is also what is contributing to the problems that @shepmaster is experiencing, #13633 (comment)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For people following along in this thread, this PR was reverted in #13708

MadLittleMods added a commit to element-hq/synapse that referenced this pull request Feb 18, 2026
…mages being chosen over local) (#19475)

Fix remote images being chosen over the local ones we just built with
Complement in CI (any Docker environment using the `containerd` image
store). This problem means that Complement jobs in CI don't actually
test against the code from the PR (since 2026-02-10).

This PR approaches the problem the same way that @AndrewFerr proposed in
#18210. This is better than
the alternative listed below as we can just make our code compatible
with whatever image store is being used.
### Problem

Spawning from
#19460 (comment)
where we found that our Complement jobs in CI don't actually test
against the code from the PR at the moment.

This is caused by a change in Docker Engine 29.0.0:

> `containerd` image store is now the default for **fresh installs**.
This doesn't apply to daemons configured with `userns-remap` (see
[moby#47377](moby/moby#47377)).
>
> *-- 29.0.0 (2025-11-10),
https://docs.docker.com/engine/release-notes/29/#2900*

And our `ubuntu-latest` GitHub runner (`Current runner version:
'2.331.0'`)
[points](https://github.com/actions/runner-images/blob/ubuntu24/20260209.23/images/ubuntu/Ubuntu2404-Readme.md)
to using Docker client/server `29.1.5` 🎯

This Docker version bump happened on
actions/runner-images@416418d
(2026-02-10) (`28.0.4` -> `29.1.5`). Specific PR:
actions/runner-images#13633

---

I found this because I reviewed and remembered
#18210 was a thing that
@AndrewFerr ran into. And then running `dockers system prune` also
revealed the problematic `containerd` in CI. Checking the Docker
changelogs, I found the new default culprit and then could trace down
where the GitHub runners made the dependency update.

---------

Co-authored-by: Andrew Ferrazzutti <andrewf@element.io>
shamil-mubarakshin added a commit to shamil-mubarakshin/runner-images that referenced this pull request Feb 20, 2026
dwydler added a commit to wydler/runner-images-hetzner-cloud that referenced this pull request Feb 21, 2026
brittonr pushed a commit to brittonr/nix that referenced this pull request Apr 1, 2026
… 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants