Skip to content

'docker push' doesn't push tag when using containerd snapshotter #50194

@psviderski

Description

@psviderski

Description

After updating Docker from 28.1.1 to 28.2.2 (Docker Desktop on macOS Apple silicon 4.41.2 -> 4.42.0) docker push has changed behaviour when using containerd for image storage ("Use containerd for pulling and storing images" enabled in Docker Desktop).

When I pull an image from Docker Hub and then tag and push it to my local registry, it pushes only the image manifest by its digest but doesn't PUT the tag reference for the manifest.

Reproduce

# Start local registry.
docker run -d --rm -e REGISTRY_LOGLEVEL=debug -p 5001:5000 registry:2

docker pull busybox:latest
docker tag busybox:latest localhost:5001/busybox:latest
docker push localhost:5001/busybox:latest

The output for push looks good:

The push refers to repository [localhost:5001/busybox]
189fdd150837: Pushed
latest: digest: sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82 size: 610

i Info → Not all multiplatform-content is present and only the available single-platform image was pushed
         sha256:f85340bf132ae937d2c2a763b8335c9bab35d6e8293f70f606b9c6178d84f42b -> sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82

Try to pull it back:

docker pull localhost:5001/busybox:latest
Error response from daemon: failed to resolve reference "localhost:5001/busybox:latest": localhost:5001/busybox:latest: not found

See the registry logs for docker push:

DEBU[0005] GetImageManifest                              go.version=go1.20.8 http.request.host="localhost:5001" http.request.id=14afa434-1d78-4f9c-925e-45626a07277f http.request.method=HEAD http.request.remoteaddr="172.17.0.1:65516" http.request.uri="/v2/busybox/manifests/sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82" http.request.useragent="docker/28.2.2 go/go1.24.3 git-commit/45873be kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.2.2 \(darwin\))" vars.name=busybox vars.reference="sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82"
DEBU[0005] (*manifestStore).Get                          go.version=go1.20.8 http.request.host="localhost:5001" http.request.id=14afa434-1d78-4f9c-925e-45626a07277f http.request.method=HEAD http.request.remoteaddr="172.17.0.1:65516" http.request.uri="/v2/busybox/manifests/sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82" http.request.useragent="docker/28.2.2 go/go1.24.3 git-commit/45873be kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.2.2 \(darwin\))" vars.name=busybox vars.reference="sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82"
ERRO[0005] response completed with error                 err.code="manifest unknown" err.detail="unknown manifest name=busybox revision=sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82" err.message="manifest unknown" go.version=go1.20.8 http.request.host="localhost:5001" http.request.id=14afa434-1d78-4f9c-925e-45626a07277f http.request.method=HEAD http.request.remoteaddr="172.17.0.1:65516" http.request.uri="/v2/busybox/manifests/sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82" http.request.useragent="docker/28.2.2 go/go1.24.3 git-commit/45873be kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.2.2 \(darwin\))" http.response.contenttype="application/json; charset=utf-8" http.response.duration="721.334µs" http.response.status=404 http.response.written=183 vars.name=busybox vars.reference="sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82"
172.17.0.1 - - [13/Jun/2025:03:49:18 +0000] "HEAD /v2/busybox/manifests/sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82 HTTP/1.1" 404 183 "" "docker/28.2.2 go/go1.24.3 git-commit/45873be kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.2.2 \\(darwin\\))"
DEBU[0005] authorizing request                           go.version=go1.20.8 http.request.contenttype="application/vnd.oci.image.manifest.v1+json" http.request.host="localhost:5001" http.request.id=ce3b6a11-889e-48ef-9b2f-37022381ec0c http.request.method=PUT http.request.remoteaddr="172.17.0.1:65516" http.request.uri="/v2/busybox/manifests/sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82" http.request.useragent="docker/28.2.2 go/go1.24.3 git-commit/45873be kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.2.2 \(darwin\))" vars.name=busybox vars.reference="sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82"
DEBU[0005] PutImageManifest                              go.version=go1.20.8 http.request.contenttype="application/vnd.oci.image.manifest.v1+json" http.request.host="localhost:5001" http.request.id=ce3b6a11-889e-48ef-9b2f-37022381ec0c http.request.method=PUT http.request.remoteaddr="172.17.0.1:65516" http.request.uri="/v2/busybox/manifests/sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82" http.request.useragent="docker/28.2.2 go/go1.24.3 git-commit/45873be kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.2.2 \(darwin\))" vars.name=busybox vars.reference="sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82"
DEBU[0005] Putting an OCI Manifest!                      go.version=go1.20.8 http.request.contenttype="application/vnd.oci.image.manifest.v1+json" http.request.host="localhost:5001" http.request.id=ce3b6a11-889e-48ef-9b2f-37022381ec0c http.request.method=PUT http.request.remoteaddr="172.17.0.1:65516" http.request.uri="/v2/busybox/manifests/sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82" http.request.useragent="docker/28.2.2 go/go1.24.3 git-commit/45873be kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.2.2 \(darwin\))" vars.name=busybox vars.reference="sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82"
DEBU[0005] (*manifestStore).Put                          go.version=go1.20.8 http.request.contenttype="application/vnd.oci.image.manifest.v1+json" http.request.host="localhost:5001" http.request.id=ce3b6a11-889e-48ef-9b2f-37022381ec0c http.request.method=PUT http.request.remoteaddr="172.17.0.1:65516" http.request.uri="/v2/busybox/manifests/sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82" http.request.useragent="docker/28.2.2 go/go1.24.3 git-commit/45873be kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.2.2 \(darwin\))" vars.name=busybox vars.reference="sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82"
DEBU[0005] (*ocischemaManifestHandler).Put               go.version=go1.20.8 http.request.contenttype="application/vnd.oci.image.manifest.v1+json" http.request.host="localhost:5001" http.request.id=ce3b6a11-889e-48ef-9b2f-37022381ec0c http.request.method=PUT http.request.remoteaddr="172.17.0.1:65516" http.request.uri="/v2/busybox/manifests/sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82" http.request.useragent="docker/28.2.2 go/go1.24.3 git-commit/45873be kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.2.2 \(darwin\))" vars.name=busybox vars.reference="sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82"
DEBU[0005] Succeeded in putting manifest!                go.version=go1.20.8 http.request.contenttype="application/vnd.oci.image.manifest.v1+json" http.request.host="localhost:5001" http.request.id=ce3b6a11-889e-48ef-9b2f-37022381ec0c http.request.method=PUT http.request.remoteaddr="172.17.0.1:65516" http.request.uri="/v2/busybox/manifests/sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82" http.request.useragent="docker/28.2.2 go/go1.24.3 git-commit/45873be kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.2.2 \(darwin\))" vars.name=busybox vars.reference="sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82"
INFO[0005] response completed                            go.version=go1.20.8 http.request.contenttype="application/vnd.oci.image.manifest.v1+json" http.request.host="localhost:5001" http.request.id=ce3b6a11-889e-48ef-9b2f-37022381ec0c http.request.method=PUT http.request.remoteaddr="172.17.0.1:65516" http.request.uri="/v2/busybox/manifests/sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82" http.request.useragent="docker/28.2.2 go/go1.24.3 git-commit/45873be kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.2.2 \(darwin\))" http.response.duration=3.506875ms http.response.status=201 http.response.written=0
172.17.0.1 - - [13/Jun/2025:03:49:18 +0000] "PUT /v2/busybox/manifests/sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82 HTTP/1.1" 201 0 "" "docker/28.2.2 go/go1.24.3 git-commit/45873be kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.2.2 \\(darwin\\))"

Logs on docker pull:

DEBU[0027] authorizing request                           go.version=go1.20.8 http.request.host="localhost:5001" http.request.id=5ec02baa-5d7c-4385-ae42-24f3a9931d85 http.request.method=HEAD http.request.remoteaddr="172.17.0.1:56784" http.request.uri="/v2/busybox/manifests/latest" http.request.useragent="docker/28.2.2 go/go1.24.3 git-commit/45873be kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.2.2 \(darwin\))" vars.name=busybox vars.reference=latest
DEBU[0027] GetImageManifest                              go.version=go1.20.8 http.request.host="localhost:5001" http.request.id=5ec02baa-5d7c-4385-ae42-24f3a9931d85 http.request.method=HEAD http.request.remoteaddr="172.17.0.1:56784" http.request.uri="/v2/busybox/manifests/latest" http.request.useragent="docker/28.2.2 go/go1.24.3 git-commit/45873be kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.2.2 \(darwin\))" vars.name=busybox vars.reference=latest
ERRO[0027] response completed with error                 err.code="manifest unknown" err.detail="unknown tag=latest" err.message="manifest unknown" go.version=go1.20.8 http.request.host="localhost:5001" http.request.id=5ec02baa-5d7c-4385-ae42-24f3a9931d85 http.request.method=HEAD http.request.remoteaddr="172.17.0.1:56784" http.request.uri="/v2/busybox/manifests/latest" http.request.useragent="docker/28.2.2 go/go1.24.3 git-commit/45873be kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.2.2 \(darwin\))" http.response.contenttype="application/json; charset=utf-8" http.response.duration=2.400459ms http.response.status=404 http.response.written=96 vars.name=busybox vars.reference=latest
172.17.0.1 - - [13/Jun/2025:03:49:40 +0000] "HEAD /v2/busybox/manifests/latest HTTP/1.1" 404 96 "" "docker/28.2.2 go/go1.24.3 git-commit/45873be kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.2.2 \\(darwin\\))"

Note that vars.reference="sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82" is a digest everywhere. The reference for the manifest is put for the digest only: PUT /v2/busybox/manifests/sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82. There is no PUT for /v2/busybox/manifests/latest.

Expected behavior

The expected behavior is docker push should push the latest tag so that it stored in the registry and docker pull localhost:5001/busybox:latest succeeds.

Registry logs using Docker 28.1.1 (Docker Desktop on macOS Apple silicon 4.41.2):

DEBU[0045] GetImageManifest                              go.version=go1.20.8 http.request.host="localhost:5001" http.request.id=6718a3d7-6745-48ad-8305-fce1aefe7991 http.request.method=HEAD http.request.remoteaddr="172.17.0.1:59268" http.request.uri="/v2/busybox/manifests/latest" http.request.useragent="docker/28.1.1 go/go1.23.8 git-commit/01f442b kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.1.1 \(darwin\))" vars.name=busybox vars.reference=latest
ERRO[0045] response completed with error                 err.code="manifest unknown" err.detail="unknown tag=latest" err.message="manifest unknown" go.version=go1.20.8 http.request.host="localhost:5001" http.request.id=6718a3d7-6745-48ad-8305-fce1aefe7991 http.request.method=HEAD http.request.remoteaddr="172.17.0.1:59268" http.request.uri="/v2/busybox/manifests/latest" http.request.useragent="docker/28.1.1 go/go1.23.8 git-commit/01f442b kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.1.1 \(darwin\))" http.response.contenttype="application/json; charset=utf-8" http.response.duration="598.541µs" http.response.status=404 http.response.written=96 vars.name=busybox vars.reference=latest
172.17.0.1 - - [13/Jun/2025:03:45:04 +0000] "HEAD /v2/busybox/manifests/latest HTTP/1.1" 404 96 "" "docker/28.1.1 go/go1.23.8 git-commit/01f442b kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.1.1 \\(darwin\\))"
DEBU[0045] authorizing request                           go.version=go1.20.8 http.request.contenttype="application/vnd.oci.image.manifest.v1+json" http.request.host="localhost:5001" http.request.id=b49156ab-2307-4241-84ed-4044e1e0dfe6 http.request.method=PUT http.request.remoteaddr="172.17.0.1:59268" http.request.uri="/v2/busybox/manifests/latest" http.request.useragent="docker/28.1.1 go/go1.23.8 git-commit/01f442b kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.1.1 \(darwin\))" vars.name=busybox vars.reference=latest
DEBU[0045] PutImageManifest                              go.version=go1.20.8 http.request.contenttype="application/vnd.oci.image.manifest.v1+json" http.request.host="localhost:5001" http.request.id=b49156ab-2307-4241-84ed-4044e1e0dfe6 http.request.method=PUT http.request.remoteaddr="172.17.0.1:59268" http.request.uri="/v2/busybox/manifests/latest" http.request.useragent="docker/28.1.1 go/go1.23.8 git-commit/01f442b kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.1.1 \(darwin\))" vars.name=busybox vars.reference=latest
DEBU[0045] Putting an OCI Manifest!                      go.version=go1.20.8 http.request.contenttype="application/vnd.oci.image.manifest.v1+json" http.request.host="localhost:5001" http.request.id=b49156ab-2307-4241-84ed-4044e1e0dfe6 http.request.method=PUT http.request.remoteaddr="172.17.0.1:59268" http.request.uri="/v2/busybox/manifests/latest" http.request.useragent="docker/28.1.1 go/go1.23.8 git-commit/01f442b kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.1.1 \(darwin\))" vars.name=busybox vars.reference=latest
DEBU[0045] (*manifestStore).Put                          go.version=go1.20.8 http.request.contenttype="application/vnd.oci.image.manifest.v1+json" http.request.host="localhost:5001" http.request.id=b49156ab-2307-4241-84ed-4044e1e0dfe6 http.request.method=PUT http.request.remoteaddr="172.17.0.1:59268" http.request.uri="/v2/busybox/manifests/latest" http.request.useragent="docker/28.1.1 go/go1.23.8 git-commit/01f442b kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.1.1 \(darwin\))" vars.name=busybox vars.reference=latest
DEBU[0045] (*ocischemaManifestHandler).Put               go.version=go1.20.8 http.request.contenttype="application/vnd.oci.image.manifest.v1+json" http.request.host="localhost:5001" http.request.id=b49156ab-2307-4241-84ed-4044e1e0dfe6 http.request.method=PUT http.request.remoteaddr="172.17.0.1:59268" http.request.uri="/v2/busybox/manifests/latest" http.request.useragent="docker/28.1.1 go/go1.23.8 git-commit/01f442b kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.1.1 \(darwin\))" vars.name=busybox vars.reference=latest
DEBU[0045] Succeeded in putting manifest!                go.version=go1.20.8 http.request.contenttype="application/vnd.oci.image.manifest.v1+json" http.request.host="localhost:5001" http.request.id=b49156ab-2307-4241-84ed-4044e1e0dfe6 http.request.method=PUT http.request.remoteaddr="172.17.0.1:59268" http.request.uri="/v2/busybox/manifests/latest" http.request.useragent="docker/28.1.1 go/go1.23.8 git-commit/01f442b kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.1.1 \(darwin\))" vars.name=busybox vars.reference=latest
INFO[0045] response completed                            go.version=go1.20.8 http.request.contenttype="application/vnd.oci.image.manifest.v1+json" http.request.host="localhost:5001" http.request.id=b49156ab-2307-4241-84ed-4044e1e0dfe6 http.request.method=PUT http.request.remoteaddr="172.17.0.1:59268" http.request.uri="/v2/busybox/manifests/latest" http.request.useragent="docker/28.1.1 go/go1.23.8 git-commit/01f442b kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.1.1 \(darwin\))" http.response.duration=4.676542ms http.response.status=201 http.response.written=0
172.17.0.1 - - [13/Jun/2025:03:45:04 +0000] "PUT /v2/busybox/manifests/latest HTTP/1.1" 201 0 "" "docker/28.1.1 go/go1.23.8 git-commit/01f442b kernel/6.10.14-linuxkit os/linux arch/arm64 containerd-client/2.0.5+unknown storage-driver/overlayfs UpstreamClient(Docker-Client/28.1.1 \\(darwin\\))"

Note that the latest tag reference has been put correctly PUT /v2/busybox/manifests/latest HTTP/1.1.

docker version

Client:
 Version:           28.2.2
 API version:       1.50
 Go version:        go1.24.3
 Git commit:        e6534b4
 Built:             Fri May 30 12:07:35 2025
 OS/Arch:           darwin/arm64
 Context:           desktop-linux

Server: Docker Desktop 4.42.0 (195023)
 Engine:
  Version:          28.2.2
  API version:      1.50 (minimum version 1.24)
  Go version:       go1.24.3
  Git commit:       45873be
  Built:            Fri May 30 12:07:27 2025
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.7.27
  GitCommit:        05044ec0a9a75232cad458027ca83437aae3f4da
 runc:
  Version:          1.2.5
  GitCommit:        v1.2.5-0-g59923ef
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

docker info

Client:
 Version:    28.2.2
 Context:    desktop-linux
 Debug Mode: false
 Plugins:
  ai: Docker AI Agent - Ask Gordon (Docker Inc.)
    Version:  v1.4.0
    Path:     /Users/spy/.docker/cli-plugins/docker-ai
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.24.0-desktop.2
    Path:     /Users/spy/.docker/cli-plugins/docker-buildx
  cloud: Docker Cloud (Docker Inc.)
    Version:  v0.3.9
    Path:     /Users/spy/.docker/cli-plugins/docker-cloud
  compose: Docker Compose (Docker Inc.)
    Version:  v2.36.2-desktop.1
    Path:     /Users/spy/.docker/cli-plugins/docker-compose
  debug: Get a shell into any image or container (Docker Inc.)
    Version:  0.0.41
    Path:     /Users/spy/.docker/cli-plugins/docker-debug
  desktop: Docker Desktop commands (Docker Inc.)
    Version:  v0.1.9
    Path:     /Users/spy/.docker/cli-plugins/docker-desktop
  extension: Manages Docker extensions (Docker Inc.)
    Version:  v0.2.29
    Path:     /Users/spy/.docker/cli-plugins/docker-extension
  init: Creates Docker-related starter files for your project (Docker Inc.)
    Version:  v1.4.0
    Path:     /Users/spy/.docker/cli-plugins/docker-init
  mcp: Docker MCP Plugin (Docker Inc.)
    Version:  dev
    Path:     /Users/spy/.docker/cli-plugins/docker-mcp
  model: Docker Model Runner (Docker Inc.)
    Version:  v0.1.24
    Path:     /Users/spy/.docker/cli-plugins/docker-model
  pussh: Push Docker images through SSH tunnel (Unregistry)
    Version:  0.1.0
    Path:     /Users/spy/.docker/cli-plugins/docker-pussh
  sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc.)
    Version:  0.6.0
    Path:     /Users/spy/.docker/cli-plugins/docker-sbom
  scout: Docker Scout (Docker Inc.)
    Version:  v1.18.0
    Path:     /Users/spy/.docker/cli-plugins/docker-scout

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 30
 Server Version: 28.2.2
 Storage Driver: overlayfs
  driver-type: io.containerd.snapshotter.v1
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 2
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 CDI spec directories:
  /etc/cdi
  /var/run/cdi
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 05044ec0a9a75232cad458027ca83437aae3f4da
 runc version: v1.2.5-0-g59923ef
 init version: de40ad0
 Security Options:
  seccomp
   Profile: builtin
  cgroupns
 Kernel Version: 6.10.14-linuxkit
 Operating System: Docker Desktop
 OSType: linux
 Architecture: aarch64
 CPUs: 8
 Total Memory: 9.704GiB
 Name: docker-desktop
 ID: 4b14e7c3-6b93-47b1-8d35-5f52ea454843
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http.docker.internal:3128
 HTTPS Proxy: http.docker.internal:3128
 No Proxy: hubproxy.docker.internal
 Labels:
  com.docker.desktop.address=unix:///Users/spy/Library/Containers/com.docker.docker/Data/docker-cli.sock
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5555
  ::1/128
  127.0.0.0/8
 Live Restore Enabled: false

Additional Info

When I explicitly specify the platform to push, it pushes the tag correctly:

docker push --platform linux/arm64/v8 localhost:5001/busybox:latest

I manually pulled all platforms for the busybox image but push without specifying the platform still doesn't push the tag:

$ docker images --tree
localhost:5001/busybox:latest
busybox:latest                              f85340bf132a         56MB         17.9MB
├─ linux/amd64                              7c0ffe575123       6.55MB         2.15MB
├─ linux/arm/v5                             94d9880e2e0e       5.38MB         1.78MB
├─ linux/arm/v6                             1a0f0cba8dd8       2.79MB          952kB
├─ linux/arm/v7                             c859036e179b       4.12MB         1.56MB
├─ linux/arm64/v8                           68a0d55a75c9       6.02MB         1.85MB
├─ linux/386                                18ac7a6883a8       7.03MB         2.21MB
├─ linux/mips64le                           ddac8b228527       7.31MB         2.08MB
├─ linux/ppc64le                            8412c80c59e2       8.34MB         2.47MB
├─ linux/riscv64                            863941f561e8        2.5MB          925kB
└─ linux/s390x                              fec56dcf5c3b       6.01MB         1.89MB

$ docker push localhost:5001/busybox
Using default tag: latest
The push refers to repository [localhost:5001/busybox]
189fdd150837: Pushed
latest: digest: sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82 size: 610

i Info → Not all multiplatform-content is present and only the available single-platform image was pushed
         sha256:f85340bf132ae937d2c2a763b8335c9bab35d6e8293f70f606b9c6178d84f42b -> sha256:68a0d55a75c935e1101d16ded1c748babb7f96a9af43f7533ba83b87e2508b82

The multi-platform image I built locally has been successfully pushed though:

$ docker build --platform linux/amd64,linux/arm64 -t localhost:5000/docs .
...
$ docker push localhost:5001/docs
Using default tag: latest
The push refers to repository [localhost:5001/docs]
bcc91abf7145: Pushed
10333d3685a0: Pushed
6e771e15690e: Pushed
f18232174bc9: Pushed
014036ce367b: Pushed
dad9499f3f20: Pushed
bdce526f2e23: Pushed
eb621c62f244: Pushed
f5475df3da1b: Pushed
4f4fb700ef54: Pushed
3b0ae3ace4a6: Pushed
4f1d2c43b341: Pushed
6e6e55cd8053: Pushed
a7ffa38328d6: Pushed
4348a28cf742: Pushed
latest: digest: sha256:b8c447f129a683198a5415ca532660bd7de430051c6671469304e2bc4d3cdb9d size: 1609

I suspect the bug is related to this change #49949 cc @henry118

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/distributionImage Distributioncontainerd-integrationIssues and PRs related to containerd integrationkind/bugBugs are bugs. The cause may or may not be known at triage time so debugging may be needed.status/0-triageversion/28.2

    Type

    Projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions