cli
cli copied to clipboard
docker rmi <image:tag> deletes both amd64 and arm64 builds on Apple Silicon
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.
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.