Skip to content
Latchkey

Docker containerd Image Store Not Enabled - Multi-Platform Load Still Fails in CI

Some Docker features - notably loading multi-platform images locally - require the containerd image store (the containerd snapshotter). With the classic image store still active, those operations fail even though newer docs say they are supported.

What this error means

A multi-platform --load, or another feature that assumes the containerd store, fails on a daemon where the containerd snapshotter is not enabled. docker info does not list the containerd-backed storage driver.

docker buildx / docker info
ERROR: docker exporter does not currently support exporting manifest lists
# multi-platform --load works only with the containerd image store, which is not enabled:
# docker info | grep -i 'driver'  ->  Storage Driver: overlay2 (classic store)

Diagnose it: separate auth from naming from rate limits

Registry errors look alike and have unrelated causes. Work out which of the three you have before changing credentials, because a malformed image reference produces an error that reads like an authentication failure.

Terminal
# 1. is the reference even valid? (lowercase, no spaces, valid tag)
docker image inspect "$IMAGE" 2>&1 | head -2

# 2. are you authenticated to the right registry?
cat ~/.docker/config.json | grep -o '"[^"]*\.[^"]*"' | head

# 3. are you rate limited? (Docker Hub anonymous pulls)
curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimit-preview/test:pull" \
  | grep -o '"token"' >/dev/null && echo "token ok"

Common causes

The classic image store is still in use

By default many daemons use the classic image store, which is single-platform. Multi-platform local images need the containerd image store, which must be turned on explicitly.

containerd snapshotter not enabled in daemon.json

The feature is gated behind features.containerd-snapshotter (or the equivalent Docker Desktop setting). Without enabling it and restarting, the daemon keeps the classic store.

How to fix it

Enable the containerd image store

Turn on the containerd snapshotter in daemon.json and restart the daemon.

daemon.json / Terminal
# /etc/docker/daemon.json
{ "features": { "containerd-snapshotter": true } }

sudo systemctl restart docker
docker info | grep -i 'driver'   # expect containerd-backed storage

Or avoid the feature on the classic store

If you cannot enable it, push multi-arch images and load single-arch only.

Terminal
docker buildx build --platform linux/amd64,linux/arm64 --push -t myorg/api:1.4.2 .
docker buildx build --platform linux/amd64 --load -t myorg/api:1.4.2 .

Authenticate in the job, not in the image

.github/workflows/ci.yml
- uses: docker/login-action@v3
  with:
    registry: ghcr.io
    username: ${{ github.actor }}
    password: ${{ secrets.GITHUB_TOKEN }}

# GHCR needs this on the job or the push is rejected as unauthorised
permissions:
  contents: read
  packages: write

How to prevent it

  • Enable the containerd image store on runners that need multi-platform local images.
  • Otherwise push multi-arch and load single-arch.
  • Check docker info for the active storage backend in CI.

Frequently asked questions

What causes Docker containerd image store not enabled?
There are 2 common causes: the classic image store is still in use and containerd snapshotter not enabled in daemon.json. By default many daemons use the classic image store, which is single-platform.
How do I fix Docker containerd image store not enabled?
There are 2 fixes depending on which cause you have: enable the containerd image store and or avoid the feature on the classic store. Work through them in order, since the first is the most common.
What does Docker containerd image store not enabled actually mean?
A multi-platform --load, or another feature that assumes the containerd store, fails on a daemon where the containerd snapshotter is not enabled.
How do I stop Docker containerd image store not enabled happening again?
Enable the containerd image store on runners that need multi-platform local images. The prevention section lists 3 changes that keep it from recurring.

Related guides

References

This is a registry failure, not a bug in your code. Latchkey detects, repairs, and retries it for you. Start free → 30-day trial · No credit card