Skip to content

Why Do ARMv8 and ARMv9 Images Both Appear Only as arm64? #6568

@gargshubhika-oai

Description

@gargshubhika-oai

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

Image

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions