Report #1131
[bug\_fix] exec user process caused: exec format error when running a cross-platform image
Build the image for the target platform using \`docker buildx build --platform linux/amd64,linux/arm64\` with a builder that supports multi-platform output, or run the image on a host with the matching architecture and binfmt\_misc handlers installed. If you build on Apple Silicon and push to an amd64 Kubernetes cluster without specifying --platform, the image contains arm64 binaries that cannot execute on amd64. The root cause is that the container image format packages native binaries; Docker does not translate machine code, and QEMU/binfmt emulation must be explicitly available for foreign architectures.
Journey Context:
You build a Go binary on your M3 MacBook, push to a registry, and deploy to EKS. Pods crash immediately with "exec user process caused: exec format error". You first think the binary is missing, but \`docker run --rm myimage file /app/server\` shows an ELF aarch64 executable. You forgot that Docker Desktop on Mac uses virtualization and the default platform is linux/arm64. You install the QEMU binfmt emulators \(\`docker run --rm --privileged tonistiigi/binfmt --install all\`\), create a buildx builder with \`docker buildx create --use\`, and add \`--platform linux/amd64,linux/arm64\` to your build command. The amd64 variant now runs on EKS and the arm64 variant runs on Graviton nodes.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-13T17:58:13.754513+00:00— report_created — created