Lesstep
GitHub Actions · Ubuntu 26.04 · Checked November 4, 2026

"client version 1.32 is too old. Minimum supported API version is 1.40" on ubuntu-latest (Ubuntu 26.04): Docker 29 and Testcontainers

ubuntu-latest is moving from Ubuntu 24.04 to 26.04 between October 19 and November 19, 2026 (what else changes). The 26.04 image has Docker 29.4.2, whose daemon speaks API 1.54 and refuses anything below 1.40. The 24.04 image has Docker 28.0.4, which still accepted older clients. A client that negotiates the version with the daemon, such as the docker CLI, is not affected; a client that sends a fixed old version is refused.

Docker 29.0 raised the minimum to 1.44, and 29.3.0 lowered it to 1.40 (Docker 29 release notes). So the same message says 1.44 on a machine with Docker 29.0 to 29.2, and 1.40 on the runner.

The messages

The daemon's own answer, here to a test proxy that called /v1.32/ paths directly (twilio-voice.js #492):

client version 1.32 is too old. Minimum supported API version is 1.40, please upgrade your client to a newer version

Testcontainers for Java hides it. Every test class that starts a container fails with a generic message, and the reason is only in Testcontainers' own log (elioo-health #169, 61 of 2179 tests failed):

java.lang.IllegalStateException: Could not find a valid Docker environment. Please see logs and check configuration
...
UnixSocketClientProviderStrategy: failed with exception BadRequestException (Status 400: {"message":"client version 1.32 is too old. Minimum supported API version is 1.40, please upgrade your client to a newer version"}

Testcontainers before 1.21.4 sets the docker-java API version to 1.32 when none is configured. In thirdeye #1820 the first module with Testcontainers had 11 failures and 86 skipped tests, and the build stopped there, so none of the later modules ran.

Fix 1: Testcontainers 1.21.4 or 2.x

1.21.4 is the 1.x release made to work with the recent Docker Engine changes: it tries API 1.44 and falls back to 1.32. thirdeye went from 11 failures to 0 with a one-line version change and no code changes. 2.x has the fix too, but renames artifacts, for example mysql to testcontainers-mysql.

Check the version that actually runs, not only the one you declare. In elioo-health the modules declared 1.19.7, but the Spring Boot BOM pulled testcontainers and jdbc up to 1.20.4, so one test classpath held two versions. gradle dependencies or mvn dependency:tree shows the resolved version, and the first lines of Testcontainers' log print it (Testcontainers version: 1.20.4).

Fix 2: set the API version for docker-java

If you cannot upgrade yet, give docker-java a version the daemon accepts. Remote-Falcon #204 uses this locally on Docker 29: write api.version=1.44 to ~/.docker-java.properties, or pass -Dapi.version=1.44 to the test JVM.

- name: Pin the docker-java API version
  run: echo 'api.version=1.44' >> ~/.docker-java.properties

The DOCKER_API_VERSION variable does not help here, because docker-java does not read it.

Fix 3: lower the minimum on the runner's daemon

When the old client is inside a tool you do not control, let the daemon accept it. liberia-emr #341 needed this for a Maven plugin that starts Testcontainers 1.15, which always asks for API 1.30. Its step passed on ubuntu-26.04 20261025.179.1 and printed Docker 29.4.2, min API 1.24:

- name: Allow older Docker API versions
  run: |
    sudo mkdir -p /etc/systemd/system/docker.service.d
    printf '[Service]\nEnvironment=DOCKER_MIN_API_VERSION=1.24\n' \
      | sudo tee /etc/systemd/system/docker.service.d/min-api-version.conf
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    docker version --format 'Docker {{.Server.Version}}, min API {{.Server.MinAPIVersion}}'

DOCKER_MIN_API_VERSION is read by the daemon when it starts, so putting it in the job's env: changes nothing. The restart can stop containers that are already running, and the containers of a job's services: start before the first step. In a job with services:, prefer Fix 1 or 2.

Telling it apart

Other 26.04 failures

See failed jobs from IntelliJ IDEA

Pipeline Inbox for GitHub Actions Workflows, a plugin by Lesstep for JetBrains IDEs 2024.1 or later, lists the runs of all your repositories in an IDE tool window, with their jobs and steps, and your current branch's runs are in the status bar. Reading is free; re-running failed jobs, cancelling, running workflows and reviewing deployments are Pro (US$1.50 a month, with a 30-day trial).

Get it on JetBrains Marketplace

GitHub and GitHub Actions are trademarks of GitHub, Inc.; Ubuntu is a trademark of Canonical Ltd.; Docker is a trademark of Docker, Inc.; Java is a registered trademark of Oracle and/or its affiliates; IntelliJ IDEA is a trademark of JetBrains s.r.o. This page is not affiliated with, sponsored or endorsed by GitHub, Inc., Canonical, Docker, Inc., Oracle or JetBrains.

More: "The ubuntu-latest label will migrate to Ubuntu 26" · kind load docker-image on Ubuntu 26.04 · Playwright on Ubuntu 26.04 · GitHub Actions plugins for IntelliJ IDEA compared · 日本語