✦ For everyone, free.

Practical knowledge for real and everyday life

Home

19.3.3.4 Version Platform Output

A focused guide to Version Platform Output, connecting core concepts with practical Docker and container operations.

The platform output in docker version refers to the OS/Arch fields present in both the Client and Server sections. These fields identify the operating system and CPU architecture for which each component — the Docker CLI and the Docker daemon — was compiled and on which they are running. Understanding the platform output is important when working with multi-architecture environments, remote Docker hosts, Docker Desktop, and cross-platform container deployments.

Where Platform Output Appears

docker version
Client: Docker Engine - Community
 Version:           25.0.3
 API version:       1.44
 Go version:        go1.21.6
 Git commit:        4debf41
 Built:             Tue Feb  6 21:12:32 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          25.0.3
  API version:      1.44 (minimum version 1.12)
  Go version:       go1.21.6
  Git commit:       4debf41
  Built:            Tue Feb  6 21:12:32 2024
  OS/Arch:          linux/amd64
  Experimental:     false

Format of the OS/Arch Field

The OS/Arch value is formatted as <os>/<arch>, where:

  • <os> is the operating system kernel: linux, darwin, or windows.
  • <arch> is the CPU instruction set architecture.

Common values:

OS/ArchEnvironment
linux/amd64Linux on 64-bit Intel/AMD processors. The most common for servers, VMs, and Docker Desktop on x86 Macs.
linux/arm64Linux on 64-bit ARM (AWS Graviton, Raspberry Pi 4, Docker Desktop on Apple Silicon).
linux/arm/v7Linux on 32-bit ARMv7 (Raspberry Pi 3 and earlier).
darwin/amd64macOS on Intel processors.
darwin/arm64macOS on Apple Silicon (M1, M2, M3).
windows/amd64Windows on 64-bit Intel/AMD.

Client Platform

The Client OS/Arch is the platform of the machine running the Docker CLI binary. It determines which binary was downloaded and installed. A CLI binary compiled for darwin/arm64 cannot run on linux/amd64.

The platform of the client is independent of the platform of the server. A client on darwin/arm64 (Apple Silicon Mac) can connect to a server running on linux/amd64 (a remote Linux host or a Linux VM inside Docker Desktop).

Server Platform

The Server OS/Arch is the platform of the machine running the Docker daemon. For Linux servers and cloud instances, this is typically linux/amd64 or linux/arm64. For Docker Desktop on macOS, the server runs inside a Linux virtual machine, so it always reports linux/amd64 or linux/arm64 regardless of the host Mac's processor.

Client and Server Platform Mismatch

Client and server platforms do not need to match. This is a common and expected configuration in several scenarios:

Docker Desktop on macOS (Intel):

Client OS/Arch:  darwin/amd64
Server OS/Arch:  linux/amd64

Docker Desktop on macOS (Apple Silicon):

Client OS/Arch:  darwin/arm64
Server OS/Arch:  linux/arm64

CLI on macOS connecting to a remote Linux server:

Client OS/Arch:  darwin/arm64
Server OS/Arch:  linux/amd64

CLI on Linux connecting to a remote Linux ARM server:

Client OS/Arch:  linux/amd64
Server OS/Arch:  linux/arm64

In all these cases, the Docker API communicates over a socket or TCP, and the platform difference between client and server is transparent to most operations.

Significance for Container Images

The server platform is critical when pulling and running container images. By default, Docker pulls the image variant matching the server's platform. A server on linux/amd64 pulls the linux/amd64 variant of an image; a server on linux/arm64 pulls the linux/arm64 variant.

If an image does not have a variant for the server's platform, the pull fails with an error indicating no matching manifest. To override and pull a specific platform variant:

docker pull --platform linux/amd64 nginx:latest

To build an image for a platform different from the daemon's native platform:

docker build --platform linux/arm64 -t my_image:arm64 .

Multi-platform builds with BuildKit can produce images for multiple platforms simultaneously:

docker buildx build --platform linux/amd64,linux/arm64 -t my_image:latest .

Extracting Platform Information

docker version --format "{{.Client.Os}}/{{.Client.Arch}}"
docker version --format "{{.Server.Os}}/{{.Server.Arch}}"

These fields are available individually as .Os and .Arch in Go templates.

Platform and Image Compatibility

An important practical point is that containers run by the daemon must match the daemon's platform. A linux/amd64 daemon can run linux/amd64 containers. It can also run linux/386 containers (32-bit Linux x86) on most systems due to backward compatibility in the kernel. It cannot run linux/arm64 containers natively without emulation (such as QEMU or Rosetta).

Docker Desktop on Apple Silicon (M3) uses Rosetta 2 to run linux/amd64 containers on a linux/arm64 daemon when needed, which is why many x86 images still work transparently on M-series Macs despite the architecture difference.