Why Do ARMv8 and ARMv9 Images Both Appear Only as arm64?
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- docker, go
- Lĩnh vực
- build-system, cli
Hướng nghiên cứu
Không có tệp nguồn hoặc bài kiểm thử nào được nêu tên. Hãy bắt đầu bằng cách tái hiện các lệnh docker build và buildx build được hiển thị với linux/arm64, linux/arm64/v8 và linux/arm64/v9, sau đó kiểm tra metadata của manifest đã được push và cảnh báo về nền tảng trùng lặp. Được xem là hoàn tất khi hành vi của biến thể ARM được giải thích hoặc một bản sửa lỗi đã được xác nhận và có phạm vi cụ thể được xác định.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Description
System Information
Gracehopper
~$ lscpu
Architecture: aarch64
CPU op-mode(s): 64-bit
Byte Order: Little Endian
CPU(s): 72
On-line CPU(s) list: 0-71
Vendor ID: ARM
Model name: Neoverse-V2
~$ hostnamectl
Operating System: Ubuntu 22.04.5 LTS
Kernel: Linux 6.8.0-1025-nvidia-64k
Architecture: arm64
Hardware Vendor: Supermicro
Hardware Model: ARS-111GL-NHR
~$ docker --version
Docker version 28.0.4, build b8034c0
~$ which docker
/usr/bin/docker
$ snap list docker
error: no matching snaps installed
Jetson
~$ hostnamectl
Operating System: Ubuntu 22.04.5 LTS
Kernel: Linux 5.15.136-tegra
Architecture: arm64
Hardware Vendor: NVIDIA
Hardware Model: NVIDIA Jetson AGX Orin Developer Kit
~$ lscpu
Architecture: aarch64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 12
On-line CPU(s) list: 0-11
Vendor ID: ARM
Model name: Cortex-A78AE
~$ docker --version
Docker version 28.4.0, build d8eb465
~$ which docker
/usr/bin/docker
~$ snap list docker
error: no matching snaps installed
Building Images
Jetson
$ docker build -t my-alpine-app .
$ docker tag my-alpine-app dockerhubuser/test-alpine:jetsonV8
$ docker push dockerhubuser/test-alpine:jetsonV8
Gracehopper
$ docker build -t my-alpine-app .
$ docker tag my-alpine-app dockerhubuser/test-alpine:gracehopperNeoverseV2
$ docker push dockerhubuser/test-alpine:gracehopperNeoverseV2
Both images were built from the same simple Dockerfile shown below:
$ cat Dockerfile
FROM alpine:3.18
WORKDIR /app
COPY . /app
DockerHub
On Docker Hub, both images appear simply as linux/arm64, without specifying a variant.
But when I check official images such as Alpine, the variant is shown as v8.
- Since Gracehopper uses ARMv9 (Neoverse V2), why isn’t the variant reflected (e.g., v9)?
- Is v8 currently considered the default for arm64, and v9 not yet officially recognized by Docker Hub/OCI specs?
- Is there a way to explicitly set or detect the v9 variant when building and pushing images?
Multi-Architecture Build
I also experimented with a multi-architecture build targeting three platforms: amd64, Gracehopper (ARMv9), and Jetson (ARMv8).
System Information for x86-64
~$ hostnamectl
Operating System: Ubuntu 24.04.1 LTS
Kernel: Linux 6.8.0-60-generic
Architecture: x86-64
Hardware Vendor: Dell Inc.
~$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 43 bits physical, 48 bits virtual
Byte Order: Little Endian
CPU(s): 64
On-line CPU(s) list: 0-63
Vendor ID: AuthenticAMD
Model name: AMD EPYC 7282 16-Core Processor
~$ docker --version
Docker version 28.1.1, build 4eba377
~$ which docker
/usr/bin/docker
~$ docker buildx version
github.com/docker/buildx v0.23.0 28c90ea
Building Images
docker buildx build --target oai-lmf --tag dockerhubuser/oai-lmf:gh-jetson --platform linux/amd64,linux/arm64/v8,linux/arm64 --file docker/Dockerfile.lmf.ubuntu --builder gh-jetson-multiarchbuilder --progress=plain --push . 2>&1 | tee LMF_log_multiarch_buildx.log
When explicitly specifying platforms like this:
--platform linux/amd64,linux/arm64/v8,linux/arm64/v9
the build ran for about 45 minutes (roughly 3× longer than the same Dockerfile on a single architecture) before failing.
If I instead use:
--platform linux/amd64,linux/arm64/v8,linux/arm64
Even though this warning appears, the build still completes and the image is pushed to Docker Hub — but without any variant being shown (only linux/arm64).
1 warning found (use docker --debug to expand):
- Duplicate platform result requested "linux/arm64"
Reproduce
$ cat Dockerfile
FROM alpine:3.18
WORKDIR /app
COPY . /app
Build the above image, from both Jetson and Gracehopper; and push to dockerhub
$ docker build -t my-alpine-app .
$ docker tag my-alpine-app dockerhubuser/test-alpine:jetsonV8
$ docker push dockerhubuser/test-alpine:jetsonV8
$ docker build -t my-alpine-app .
$ docker tag my-alpine-app dockerhubuser/test-alpine:gracehopperNeoverseV2
$ docker push dockerhubuser/test-alpine:gracehopperNeoverseV2
Expected behavior
Docker is treating image build on Gracehopper ARM Neoverse v9 as only arm64 and not with the variant
docker version
Gracehopper:
~$ docker version
Client: Docker Engine - Community
Version: 28.0.4
API version: 1.48
Go version: go1.23.7
Git commit: b8034c0
Built: Tue Mar 25 15:07:33 2025
OS/Arch: linux/arm64
Context: default
Jetson
~$ docker version
Client: Docker Engine - Community
Version: 28.4.0
API version: 1.51
Go version: go1.24.7
Git commit: d8eb465
Built: Wed Sep 3 20:58:58 2025
OS/Arch: linux/arm64
Context: default
Server: Docker Engine - Community
Engine:
Version: 28.4.0
API version: 1.51 (minimum version 1.24)
Go version: go1.24.7
Git commit: 249d679
Built: Wed Sep 3 20:58:58 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
Gracehopper
$ docker info
Client: Docker Engine - Community
Version: 28.0.4
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.22.0
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.34.0
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 2
Running: 2
Paused: 0
Stopped: 0
Images: 35
Server Version: 28.0.4
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
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: runc io.containerd.runc.v2 nvidia
Default Runtime: runc
Init Binary: docker-init
containerd version: 753481ec61c7c8955a23d6ff7bc8e4daed455734
runc version: v1.2.5-0-g59923ef
init version: de40ad0
Security Options:
apparmor
seccomp
Profile: builtin
cgroupns
Kernel Version: 6.8.0-1025-nvidia-64k
Operating System: Ubuntu 22.04.5 LTS
OSType: linux
Architecture: aarch64
CPUs: 72
Total Memory: 478.5GiB
Jetson:
~$ docker info
Client: Docker Engine - Community
Version: 28.4.0
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.27.0
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.39.2
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 1
Running: 1
Paused: 0
Stopped: 0
Images: 13
Server Version: 28.4.0
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
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 nvidia 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: 5.15.136-tegra
Operating System: Ubuntu 22.04.5 LTS
OSType: linux
Architecture: aarch64
CPUs: 12
Total Memory: 61.37GiB
Additional Info
No response
- Ngôn ngữ chính
- Go
- Star
- 6.1k
- Fork
- 2.2k
- Merge trung bình
- 1 ngày 17 giờ
- Pull request đã merge (30 ngày)
- 28
Chuẩn bị môi trường
- Có Dockerfile hoặc tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của docker/cli
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 92/100
Maintainer thường phản hồi trong vòng 1 ngày
-
kind/bug status/0-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
Maintainer thường phản hồi trong vòng 1 ngày
-
kind/bug status/0-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
docker/cli#7176 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
docker/cli#7005 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
kind/feature status/0-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
docker/cli#6919 · 3 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Issue tương tự
-
feedback laptop
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Validator client startup retry loop ignores context cancellation until the reconnect backoff expiresĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
OffchainLabs/prysm#17596 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
status: ready for dev
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 92/100
hyperledger-labs/fabric-smart-client#2004 ·
Maintainer thường phản hồi trong vòng 1 ngày