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, orwindows.<arch>is the CPU instruction set architecture.
Common values:
| OS/Arch | Environment |
|---|---|
linux/amd64 | Linux on 64-bit Intel/AMD processors. The most common for servers, VMs, and Docker Desktop on x86 Macs. |
linux/arm64 | Linux on 64-bit ARM (AWS Graviton, Raspberry Pi 4, Docker Desktop on Apple Silicon). |
linux/arm/v7 | Linux on 32-bit ARMv7 (Raspberry Pi 3 and earlier). |
darwin/amd64 | macOS on Intel processors. |
darwin/arm64 | macOS on Apple Silicon (M1, M2, M3). |
windows/amd64 | Windows 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.