How to fix Error response from daemon: client version X.XX is too old. Minimum supported API version is X.XX in Docker

DockerINTERMEDIATEMEDIUMUpdated Dec 6, 2025· 653 views

This error occurs when your Docker client uses an older API version than the minimum supported by the Docker daemon. Common after Docker Engine 29.0 upgrade which raised the minimum API to v1.44. Fix by updating the client, lowering daemon's minimum API, or using DOCKER_API_VERSION.

Quick fix

Fixes Error response from daemon: client version X.XX is too old. Minimum supported API version is X.XX

docker version
  1. Check current API versions
  2. Option 1: Update Docker client to match server
  3. Option 2: Lower the daemon's minimum API version
  4. Option 3: Set DOCKER_API_VERSION on the client
docker — error
docker version
Error response from daemon: client version X.XX is too old. Minimum supported API version is X.XX

What this error means

When Docker commands are executed, the Docker client communicates with the Docker daemon through a REST API. Both the client and daemon support specific API versions, and version negotiation occurs automatically to find a compatible version they can both speak. The "client version is too old" error indicates that your Docker client is trying to use an API version that the Docker daemon no longer supports. This became a widespread issue with Docker Engine 29.0.0 (released in 2025), which raised the minimum supported API version from v1.24 to v1.44, effectively requiring Docker clients to be version 25.0 or newer. This error commonly affects: - **CI/CD pipelines** using older Docker-in-Docker images or Docker clients - **Third-party tools** like Traefik, Portainer, or Testcontainers that use older Docker SDKs - **Remote Docker setups** where the client and server versions are mismatched - **Development environments** after a Docker daemon upgrade without upgrading the client The mismatch can occur in either direction - a client that's too old for the server, or less commonly, a server that's too old for the client.

Typical symptoms

  • Docker commands fail with 'Error response from daemon: client version X.XX is too old'
  • Error mentions 'Minimum supported API version is 1.44' (or another version)
  • CI/CD pipelines fail after Docker engine auto-update
  • Traefik, Portainer, or other container management tools stop discovering containers
  • docker-compose or docker compose commands fail with API version errors
  • Testcontainers tests fail with API compatibility errors
  • Docker SDK-based applications stop working after daemon upgrade
  • Remote Docker connections from older clients fail

Common causes

  1. Docker Engine upgraded to version 29.0+ which requires API v1.44 minimum (most common)
  2. Docker-in-Docker (DIND) image auto-updated to 29.x while client remains on older version
  3. Third-party tools using older Docker SDK versions incompatible with new daemon
  4. Client and server Docker versions significantly mismatched
  5. CI/CD runner using floating Docker image tags that auto-updated
  6. DOCKER_API_VERSION environment variable set to an unsupported version
  7. Using an outdated Docker client binary with a newer daemon
  8. Container orchestration tools not updated after daemon upgrade

How to fix "Error response from daemon: client version X.XX is too old. Minimum supported API version is X.XX"

1Check current API versions

First, identify exactly which API versions your client and server support:

bash
docker version

This shows both client and server versions with their API versions:

bash
Client:
 Version:           24.0.7
 API version:       1.43
 ...

Server:
 Engine:
  Version:          29.0.0
  API version:      1.48 (minimum version 1.44)
  ...

In this example, the client supports API 1.43 but the server requires minimum 1.44, causing the error.

If docker version itself fails, the client cannot even negotiate with the server. Check what version you have:

bash
docker --version
which docker
2Option 1: Update Docker client to match server

The cleanest solution is to update your Docker client to a version that supports the required API.

On Linux (Ubuntu/Debian):

bash
# Update package list and upgrade Docker
sudo apt-get update
sudo apt-get install --only-upgrade docker-ce docker-ce-cli containerd.io

# Verify the upgrade
docker version

On Linux (CentOS/RHEL/Fedora):

bash
sudo dnf upgrade docker-ce docker-ce-cli containerd.io
# or
sudo yum upgrade docker-ce docker-ce-cli containerd.io

On macOS/Windows (Docker Desktop):

Update Docker Desktop through the application's update mechanism or download the latest version from https://www.docker.com/products/docker-desktop

For CI/CD pipelines:

Update your Docker client image to match the server:

yaml
# GitLab CI example - pin to a compatible version
image: docker:29.0
services:
  - docker:29.0-dind
3Option 2: Lower the daemon's minimum API version

If you cannot update all clients (e.g., third-party tools), configure the Docker daemon to accept older API versions.

Method A: Edit daemon.json

bash
# Create or edit daemon.json
sudo nano /etc/docker/daemon.json

Add or merge in this configuration:

json
{
  "min-api-version": "1.24"
}

Use the API version your clients require. Common values:
- 1.24 - Supports Docker 1.12+
- 1.40 - Supports Docker 19.03+
- 1.41 - Supports Docker 20.10+
- 1.43 - Supports Docker 24.0+

Restart Docker:

bash
sudo systemctl restart docker

Verify the change:

bash
docker version
# Should show: API version: 1.48 (minimum version 1.24)

For Docker Desktop (macOS/Windows):

Go to Settings -> Docker Engine and add "min-api-version": "1.24" to the JSON configuration.

Method B: Systemd environment variable

bash
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/min-api-version.conf << 'EOF'
[Service]
Environment="DOCKER_MIN_API_VERSION=1.24"
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker
4Option 3: Set DOCKER_API_VERSION on the client

Force the Docker client to use a specific API version by setting an environment variable. This is useful for temporary fixes or debugging.

For single commands:

bash
DOCKER_API_VERSION=1.44 docker ps
DOCKER_API_VERSION=1.44 docker-compose up

For your shell session:

bash
export DOCKER_API_VERSION=1.44
docker ps  # Now uses API 1.44

In CI/CD pipelines (GitLab example):

yaml
variables:
  DOCKER_API_VERSION: "1.44"

build:
  script:
    - docker build -t myapp .

In docker-compose.yml:

yaml
services:
  myservice:
    environment:
      - DOCKER_API_VERSION=1.44

Important: This only works if the client supports the specified version. Setting a version higher than your client supports will fail.

5Option 4: Downgrade Docker Engine (temporary workaround)

If you need immediate compatibility and cannot update clients, you can temporarily downgrade the Docker daemon.

On Ubuntu/Debian:

bash
# List available versions
apt-cache madison docker-ce

# Downgrade to a specific version (e.g., 28.0.4)
sudo apt-get install docker-ce=5:28.0.4-1~ubuntu.22.04~jammy docker-ce-cli=5:28.0.4-1~ubuntu.22.04~jammy

# Hold the version to prevent auto-upgrade
sudo apt-mark hold docker-ce docker-ce-cli

On CentOS/RHEL:

bash
# List available versions
yum list docker-ce --showduplicates

# Downgrade
sudo yum downgrade docker-ce-28.0.4 docker-ce-cli-28.0.4

# Hold the version
sudo yum versionlock docker-ce docker-ce-cli

For Docker-in-Docker in CI/CD:

Pin to a specific version instead of using :latest or :dind:

yaml
services:
  - docker:28.0.4-dind

Warning: Downgrading is a temporary measure. Plan to update your clients to maintain security patches and new features.

6Fix for specific tools (Traefik, Portainer, etc.)

Popular container management tools may need updates or configuration changes.

Traefik:

Traefik versions before 3.3.6 / 2.11.18 use API v1.24 by default. Either:

1. Update Traefik to the latest version (recommended)
2. Lower daemon's min-api-version to 1.24
3. Traefik 3.3.6+ supports API version negotiation

yaml
# docker-compose.yml for Traefik
services:
  traefik:
    image: traefik:v3.3.6  # or newer

Portainer:

Update to the latest Portainer version:

bash
docker pull portainer/portainer-ce:latest
# Restart your Portainer container

Testcontainers:

Update your Testcontainers dependency to the latest version:

xml
<!-- Maven -->
<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>testcontainers</artifactId>
    <version>1.21.0</version> <!-- Use latest -->
</dependency>
groovy
// Gradle
testImplementation 'org.testcontainers:testcontainers:1.21.0'

Docker SDK for Python/Go/Node.js:

Update to the latest SDK version that supports API negotiation.

7Verify the fix

After applying your chosen solution, verify everything works:

bash
# Check versions
docker version

# Test basic operations
docker ps
docker images
docker pull hello-world
docker run --rm hello-world

# Check daemon configuration
docker info | grep -i "api version"

For CI/CD pipelines:

Run a test pipeline to ensure all Docker operations work correctly.

For third-party tools:

- Check Traefik logs: docker logs traefik
- Check Portainer can connect to Docker
- Run your Testcontainers test suite

If issues persist:

Check for multiple Docker installations or cached client binaries:

bash
which -a docker
type docker

Ensure you're using the correct Docker binary and that no old versions remain in your PATH.

Advanced notes

### Understanding Docker API Versioning

Docker's API uses semantic versioning independent of Docker Engine versions. Here's the mapping:

| API Version | Docker Engine Version | Notes |
|-------------|----------------------|-------|
| 1.24 | 1.12+ | Long-standing minimum |
| 1.40 | 19.03+ | Added BuildKit support |
| 1.41 | 20.10+ | Added manifest list support |
| 1.43 | 24.0+ | |
| 1.44 | 25.0+ | New minimum in Docker 29.0 |
| 1.48 | 29.0+ | Current as of Docker 29 |

### API Version Negotiation

Modern Docker clients (1.13+) support automatic API version negotiation. When connecting, the client:

1. Queries the server's supported API versions
2. Selects the highest version both support
3. Uses that version for subsequent requests

This negotiation can be disabled by setting DOCKER_API_VERSION explicitly, which is sometimes needed for debugging but generally not recommended.

### Why Docker 29.0 Made This Breaking Change

Docker 29.0 dropped support for API versions below 1.44 because:

1. Maintenance burden: Supporting old API versions requires extensive backward compatibility code
2. Security: Old API versions may have security vulnerabilities
3. Feature parity: New features require minimum API versions
4. Docker 25.0+ EOL: Versions before 25.0 are no longer supported

### Remote Docker Connections

When connecting to a remote Docker daemon over TCP or SSH, version mismatches are common:

bash
# SSH connection to remote Docker
export DOCKER_HOST=ssh://user@remote-host
docker version  # May show version mismatch

Solutions:
1. Update Docker on the remote host
2. Set DOCKER_API_VERSION to match the remote daemon
3. Configure min-api-version on the remote daemon

### Docker Contexts

If you use Docker contexts to manage multiple Docker endpoints, check each context's compatibility:

bash
# List contexts
docker context ls

# Check version for a specific context
docker --context my-remote-server version

### Buildx and API Versions

Docker Buildx has its own version requirements. If builds fail with API version errors:

bash
# Check buildx version
docker buildx version

# Update buildx
docker buildx install

### Kubernetes Integration

If using Docker with Kubernetes (e.g., Docker Desktop's Kubernetes), ensure both are updated together to maintain compatibility.

### Monitoring for Version Drift

In production environments, consider monitoring Docker versions across your infrastructure to catch version mismatches early:

bash
# Script to check versions across hosts
for host in host1 host2 host3; do
  echo "=== $host ==="
  ssh $host "docker version --format '{{.Server.Version}} API:{{.Server.APIVersion}}'"
done

Frequently asked questions

What does "Error response from daemon: client version X.XX is too old. Minimum su" mean?
When Docker commands are executed, the Docker client communicates with the Docker daemon through a REST API. Both the client and daemon support specific API versions, and version negotiation occurs automatically to find a compatible version they can both speak. The "client version is too old" error indicates that your Docker client is trying to use an API version that the Docker daemon no longer supports.
How do I fix "Error response from daemon: client version X.XX is too old. Minimum su"?
This error occurs when your Docker client uses an older API version than the minimum supported by the Docker daemon. Common after Docker Engine 29.0 upgrade which raised the minimum API to v1.44. Fix by updating the client, lowering daemon's minimum API, or using DOCKER_API_VERSION.
What causes "Error response from daemon: client version X.XX is too old. Minimum su"?
Docker Engine upgraded to version 29.0+ which requires API v1.44 minimum (most common) Docker-in-Docker (DIND) image auto-updated to 29.x while client remains on older version Third-party tools using older Docker SDK versions incompatible with new daemon
Is the "Error response from daemon: client version X.XX is too old. Minimum su" error serious?
It is a medium-severity error — more of a blocker than a risk. The steps above resolve it.

Official resources & further reading