Windows10构建Linux Docker镜像ENTRYPOINT执行bash脚本报exec format错误
问题原因
你脚本十六进制转储开头的ef bb bf是UTF-8 BOM(字节序标记),这是Windows系统下编辑器保存UTF-8文件时默认添加的特殊前缀,Linux系统的程序加载器无法识别该标记:
- 加载器解析shebang行时,会把BOM和
#!/bin/bash作为一个整体当成解释器路径,系统中不存在这个带前缀的路径,所以会抛出找不到文件的提示。 - 你手动用
/bin/bash -c ./pulumi-go.sh调用时,bash会自行解析脚本内容,虽然会把带BOM的首行识别为非法语句抛出报错,但不影响后续行的执行,所以能正常输出Hello world。
解决方案
你只需要移除脚本的UTF-8 BOM即可解决exec format error报错,可任选以下一种方法操作:
- 用编辑器修改:用VS Code、Notepad++等编辑器打开脚本,将编码从「UTF-8-BOM」改为「UTF-8」后重新保存即可。
- 用Linux命令移除:在WSL或Git Bash中执行如下命令处理脚本:
sed -i '1s/^\xEF\xBB\xBF//' pulumi-go.sh
- 在Dockerfile中自动处理:在COPY脚本后添加移除BOM的步骤,避免本地文件编码影响构建:
COPY ./MyProject ./ RUN sed -i '1s/^\xEF\xBB\xBF//' pulumi-go.sh RUN chmod +x pulumi-go.sh
处理完成后重新构建镜像即可正常通过ENTRYPOINT启动脚本。
内容的提问来源于stack exchange,提问作者Dave New
相关产品推荐
相关产品推荐

