exec format error 表示什么
exec format error 表示可执行文件与宿主 CPU 架构不符、脚本缺少 shebang 被当成二进制执行,或文件被截断。排查顺序是先看架构再看文件格式,两者都排除之后才是内容问题。
基本信息
| 高频场景 | arm64 镜像在 amd64 宿主上执行,或反向 |
|---|---|
| 验证 | uname -m 与镜像平台字段对照 |
| 处置 | 改用匹配架构的标签,或补齐跨架构运行能力 |
| 脚本相关 | 缺 shebang 的脚本被当二进制执行 |
| 适用平台 | 跨架构环境里更常见 |
典型使用场景
- 部署到架构不同的服务器时容器无法启动
- 本地构建的镜像推到目标机器后直接报格式错误
- 脚本缺少 shebang 时定位问题
- 验证跨架构模拟能力是否已经生效
- 多架构发布前在本机先做一次格式检查
核对架构与格式
核对架构与格式
uname -m # 宿主架构
docker image inspect app/web:1.0 -f '{{.Os}}/{{.Architecture}}' # 镜像平台
head -1 entrypoint.sh # 确认 shebang 是否存在
docker run --platform linux/arm64 --rm app/web:1.0 uname -m # 验证目标平台可运行现象与处理方向
| 现象 | 原因 | 处理方向 |
|---|---|---|
| 起容器即报错 | 二进制架构不符 | 改用匹配架构的镜像 |
| 脚本执行报错 | 缺 shebang 或格式异常 | 补 shebang 或显式指定解释器 |
| 文件不完整 | 构建或传输异常 | 重新构建或重新导出 |
| 只有部分节点报错 | 节点架构不一致 | 按节点逐个核对架构 |
多架构清单让拉取自动选择平台;一旦用参数覆盖平台,执行侧也要具备对应的运行能力。
本地开发机构建的镜像默认架构可能与服务器不同,构建侧要显式指定目标平台。
脚本缺少 shebang 被当作二进制执行同样报这个错,用查看首行的方式一步排除。
把宿主架构与镜像平台字段对照作为第一步,可以避免在架构不匹配的基础上继续查应用。
多平台构建能一次产出适用于两类架构的制品,比事后逐台适配更省事。