Azure Container Apps部署启动报standard_init_linux.go:228 exec格式错误原因是什么?
exec format error 报错原因说明 对应报错日志:
standard_init_linux.go:228: exec user process caused: exec format error
该报错的核心本质是容器启动时加载的入口程序,与当前容器运行的CPU架构、系统环境不兼容,具体触发原因分为以下几类:
- 镜像构建架构与运行环境架构不匹配
这是最常见的触发原因:比如在苹果M系列Arm架构设备上默认构建的Arm64架构镜像,部署到默认使用amd64架构的Azure Container Apps环境运行时就会报错;反过来在x86设备上构建的amd64镜像,指定容器应用使用Arm架构运行也会出现该问题。 - 入口脚本格式不兼容Linux环境
如果在Windows系统下编写容器启动的Shell脚本,默认使用CRLF作为换行符,放到Linux容器中无法被系统正确识别,也会触发格式错误。 - 入口文件属性配置错误
Dockerfile中ENTRYPOINT或CMD指定的启动入口没有可执行权限,或者错误将非可执行文件、损坏的二进制文件设置为启动入口,也可能触发该报错。 - 多架构镜像构建配置异常
使用buildx等工具构建多架构兼容镜像时,配置错误导致实际推送到镜像仓库的镜像架构缺失,拉取到本地的镜像和运行环境不匹配,同样会出现该问题。
快速排查方案
- 构建镜像时明确指定与Azure Container Apps运行环境一致的架构,比如需要运行在amd64环境时,可在docker build命令中添加
--platform linux/amd64参数强制生成对应架构镜像 - 检查启动脚本的换行符格式,调整为Linux兼容的LF格式,同时在Dockerfile中添加
RUN chmod +x 你的启动脚本路径指令赋予执行权限 - 确认Dockerfile中ENTRYPOINT/CMD指向的文件路径正确,对应文件是对应架构下的可执行文件
内容的提问来源于stack exchange,提问作者jeffhollan
相关产品推荐
相关产品推荐

