-
Couldn't load subscription status.
- Fork 2.1k
Description
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: de40ad0docker 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.37GiBAdditional Info
No response