You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dockerfile运行shell脚本出现exec format错误如何解决

错误原因

该报错的核心诱因有两个:

  1. 你的myscript.sh没有声明脚本解释器的shebang行,Linux内核无法确定用什么程序执行该脚本
  2. 脚本是在Windows环境下编写的,行尾序列为Windows专属的CRLF格式,alpine系统的Linux内核只能识别LF格式的行尾,解析脚本时出错

你写的ENV PATH="${PATH}:/bin/myscript.sh"是错误配置(PATH需要添加目录路径而非文件路径),但不是本次报错的直接原因。

修复方案

第一步:修正shell脚本内容

给myscript.sh添加shebang声明,注意alpine镜像默认未预装bash,使用/bin/sh作为解释器即可:

#!/bin/sh
echo 'test'

第二步:转换行尾序列为Linux格式

二选一操作即可:

  • 本地修改:用编辑器打开脚本,将行尾序列从CRLF切换为LF后保存;如果是Linux/Mac环境,可直接执行dos2unix myscript.sh完成转换
  • Dockerfile内自动处理:在COPY脚本的步骤后增加转换逻辑,避免本地环境影响,修改后的Dockerfile片段如下:
COPY myscript.sh /bin/myscript.sh
# 新增行:删除脚本里的Windows换行符
RUN sed -i 's/\r$//' /bin/myscript.sh
RUN ["chmod", "+x", "/bin/myscript.sh"]
# 冗余的ENV PATH配置可以直接删除,/bin默认已经在环境变量中

额外排查点

如果按照上述步骤修改后仍然报错,可检查镜像构建架构和运行环境架构是否匹配,跨架构运行容器也会触发相同报错,可在构建镜像时通过--platform参数指定和运行环境一致的架构,比如docker build --platform linux/amd64 .

修改完成后重新构建镜像再启动容器即可解决报错。

内容的提问来源于stack exchange,提问作者cuneyttyler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 07:12:03