docker
type_error
ai_generated
true
exec /usr/bin/node: exec format error
ID: docker/exec-format-error-amd64-arm64
95%Fix Rate
90%Confidence
1Evidence
2023-03-08First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| Docker 24.0.5 | active | — | — | — |
| Docker Desktop 4.22.0 | active | — | — | — |
| Node.js 16.20.0 | active | — | — | — |
| ARM64 Ubuntu 22.04 | active | — | — | — |
| AMD64 Debian 11 | active | — | — | — |
Root Cause
Pulling an AMD64 image on an ARM64 host (or vice versa) without using multi-arch support results in a binary that the host CPU cannot execute.
generic中文
在 ARM64 主机上拉取 AMD64 镜像(反之亦然)且未使用多架构支持时,生成的二进制文件无法在主机 CPU 上执行。
Official Documentation
https://docs.docker.com/build/building/multi-platform/Workarounds
-
95% success Specify the platform explicitly in docker run: 'docker run --platform linux/arm64 node:16' on an ARM64 host, or '--platform linux/amd64' on AMD64.
Specify the platform explicitly in docker run: 'docker run --platform linux/arm64 node:16' on an ARM64 host, or '--platform linux/amd64' on AMD64.
-
90% success Use Docker Buildx to build for multiple architectures: 'docker buildx build --platform linux/amd64,linux/arm64 -t myapp:latest .'
Use Docker Buildx to build for multiple architectures: 'docker buildx build --platform linux/amd64,linux/arm64 -t myapp:latest .'
-
85% success Pull a multi-arch manifest by using the official image that supports both architectures, e.g., 'FROM --platform=$BUILDPLATFORM node:16' in your Dockerfile.
Pull a multi-arch manifest by using the official image that supports both architectures, e.g., 'FROM --platform=$BUILDPLATFORM node:16' in your Dockerfile.
中文步骤
在 docker run 中显式指定平台:在 ARM64 主机上使用 'docker run --platform linux/arm64 node:16',或在 AMD64 上使用 '--platform linux/amd64'。
使用 Docker Buildx 构建多架构镜像:'docker buildx build --platform linux/amd64,linux/arm64 -t myapp:latest .'
拉取支持多架构的官方镜像的 manifest,例如在 Dockerfile 中使用 'FROM --platform=$BUILDPLATFORM node:16'。
Dead Ends
Common approaches that don't work:
-
Reinstalling Node.js in the Dockerfile using apt-get install nodejs
90% fail
The error is not about missing Node.js but about architecture mismatch; reinstalling the same architecture package yields the same issue.
-
Adding 'RUN chmod +x /usr/bin/node' to the Dockerfile
95% fail
The file already has execute permissions; the error is due to the ELF binary being compiled for a different CPU architecture, not permission issues.
-
Setting 'FROM node:16' instead of 'FROM node:16-alpine'
60% fail
Both variants may default to the same architecture unless explicitly tagged; the tag change does not fix the architecture mismatch.