Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docker rmi <image:tag> deletes both amd64 and arm64 builds on Apple Silicon #4980

Open
DhanshreeA opened this issue Apr 3, 2024 · 1 comment
Labels
containerd-integration Issues and PRs related to containerd integration kind/bug

Comments

@DhanshreeA
Copy link

DhanshreeA commented Apr 3, 2024

Description

I have an image built for both linux/amd64, and linux/arm64 on my system. I wish to delete only one of the builds and keep the other, however docker rmi deletes both of them.

I tried the following:

  • Running docker rmi within an x86 shell (that was launched as arch -x86_64 $SHELL)

  • Running docker with the flag DOCKER_DEFAULT_PLATFORM=linux/amd64 in both x86 shell and arm shell.

Reproduce

On an ARM machine, run: docker pull hello-world

Then run docker pull --platform=linux/amd64 hello-world.

Then run run docker rmi with DOCKER_DEFAULT_PLATFORM=linux/amd64 variable, or inside an x86 shell. Docker will remove both the images.

Expected behavior

docker rmi should remove image for the specified platform.

docker version

Client:
 Cloud integration: v1.0.35+desktop.11
 Version:           25.0.3
 API version:       1.44
 Go version:        go1.21.6
 Git commit:        4debf41
 Built:             Tue Feb  6 21:13:26 2024
 OS/Arch:           darwin/arm64
 Context:           desktop-linux

Server: Docker Desktop 4.28.0 (139021)
 Engine:
  Version:          25.0.3
  API version:      1.44 (minimum version 1.24)
  Go version:       go1.21.6
  Git commit:       f417435e5f6216828dec57958c490c4f8bae4f98
  Built:            Wed Feb  7 00:39:16 2024
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.6.28
  GitCommit:        ae07eda36dd25f8a1b98dfbf587313b99c0190bb
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

docker info

Client:
 Version:    25.0.3
 Context:    desktop-linux
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.12.1-desktop.4
    Path:     /Users/dhanshree/.docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.24.6-desktop.1
    Path:     /Users/dhanshree/.docker/cli-plugins/docker-compose
  debug: Get a shell into any image or container. (Docker Inc.)
    Version:  0.0.24
    Path:     /Users/dhanshree/.docker/cli-plugins/docker-debug
  dev: Docker Dev Environments (Docker Inc.)
    Version:  v0.1.0
    Path:     /Users/dhanshree/.docker/cli-plugins/docker-dev
  extension: Manages Docker extensions (Docker Inc.)
    Version:  v0.2.22
    Path:     /Users/dhanshree/.docker/cli-plugins/docker-extension
  feedback: Provide feedback, right in your terminal! (Docker Inc.)
    Version:  v1.0.4
    Path:     /Users/dhanshree/.docker/cli-plugins/docker-feedback
  init: Creates Docker-related starter files for your project (Docker Inc.)
    Version:  v1.0.1
    Path:     /Users/dhanshree/.docker/cli-plugins/docker-init
  sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc.)
    Version:  0.6.0
    Path:     /Users/dhanshree/.docker/cli-plugins/docker-sbom
  scout: Docker Scout (Docker Inc.)
    Version:  v1.5.0
    Path:     /Users/dhanshree/.docker/cli-plugins/docker-scout

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 1
 Server Version: 25.0.3
 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
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: ae07eda36dd25f8a1b98dfbf587313b99c0190bb
 runc version: v1.1.12-0-g51d5e94
 init version: de40ad0
 Security Options:
  seccomp
   Profile: unconfined
  cgroupns
 Kernel Version: 6.6.16-linuxkit
 Operating System: Docker Desktop
 OSType: linux
 Architecture: aarch64
 CPUs: 14
 Total Memory: 7.657GiB
 Name: docker-desktop
 ID: 1604a25c-32f3-4515-8c6d-39dccf22dc27
 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
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5555
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: daemon is not using the default seccomp profile

Additional Info

For some reason, the image id for both the images is same, even though there's a size difference. These are logs from an arm machine (Apple M3, Sonoma)

REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    53641cd209a4   11 months ago   24.4kB
hello-world   latest    53641cd209a4   11 months ago   21kB

I ran the same experiment on my Linux machine where I see a completely different picture:

REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    ee301c921b8a   11 months ago   9.14kB
hello-world   latest    d2c94e258dcb   11 months ago   13.3kB

I am super curious as to why this difference both in image ids and image sizes exists on the two machines. I guess the image id being the same would explain in a way why docker rmi deletes both the builds.

@vvoland
Copy link
Contributor

vvoland commented Apr 3, 2024

Thanks! docker rmi doesn't support a --platform switch yet, so DOCKER_DEFAULT_PLATFORM has no effect.
We're actively working on a better UX for the multi-platform images and this will be possible in future releases.

This is due to how we model images with the containerd image store - image targets the manifest-list/OCI-index directly and not individual platform-specific image manifests.

In the meantime, you might want to upgrade to the 26.0 version which has a slight change to docker images output - it will no longer give multiple image entries for the same multi-platform image making this behavior more visible on the CLI side.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
containerd-integration Issues and PRs related to containerd integration kind/bug
Projects
None yet
Development

No branches or pull requests

2 participants