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

Docker容器内执行Bash脚本出现exec format error的原因

解决Docker容器的"exec format error"问题

这个standard_init_linux.go:190: exec user process caused "exec format error"错误通常由几个常见问题引发,结合你封装Mono工具的场景,我帮你梳理下可能的原因和对应解决办法:

1. 脚本换行符格式不兼容

如果你的Bash脚本是在Windows环境下编辑的,它的换行符大概率是Windows风格的CRLF(\r\n),但Linux容器里的Bash只识别Unix风格的LF(\n)。这种情况下,Bash会把#!/bin/bash后面的\r当成命令的一部分,导致无法正确解析脚本开头的shebang行,直接触发格式错误。

解决办法:

  • 本地转换格式:用dos2unix工具处理脚本,或者在VS Code等编辑器里把换行符设置为LF后重新保存。
  • 镜像构建时处理:如果没法提前修改脚本,可以在Dockerfile里加入转换步骤:
    RUN apt-get update && apt-get install -y dos2unix
    RUN dos2unix /home/your-script.sh
    

2. 脚本缺少执行权限

如果你的脚本没有被设置为可执行权限,Docker尝试启动它时会失败,也可能触发这个错误。

解决办法:

  • 构建镜像时添加权限:在Dockerfile里COPY脚本后,用chmod +x赋予执行权限:
    COPY your-script.sh /home/script.sh
    RUN chmod +x /home/script.sh
    
  • 临时 workaround:运行容器时显式指定bash来执行脚本:
    docker run -v /home/data:/data_input -i -t toolcontainer bash /home/script.sh nameofscript -i=/data_input/fileinput -o=/data_input/ -m -c=PXD00001
    

3. 镜像与主机架构不匹配

如果你的主机是ARM架构(比如M系列Mac、树莓派),而你构建的镜像是基于x86_64架构的,或者反过来,Mono的二进制文件和主机架构不兼容,就会出现执行格式错误。

解决办法:

  • 开启跨架构兼容:Docker Desktop用户可以开启Rosetta for x86/amd64 emulation on Apple Silicon选项,自动兼容跨架构镜像。
  • 指定架构构建:构建镜像时明确指定目标架构,比如:
    docker build --platform linux/amd64 -t toolcontainer .
    

4. Shebang行与基础镜像不匹配

虽然你的脚本写了#!/bin/bash,但如果容器的基础镜像里没有/bin/bash(比如用了alpine这类轻量镜像,默认只有/bin/sh),也会导致无法执行脚本。

解决办法:

  • 安装bash:如果用的是alpine镜像,先安装bash:
    RUN apk add --no-cache bash
    
  • 替换shebang:如果脚本兼容POSIX shell,可以把开头改为#!/bin/sh。

结合你的场景,最可能的原因是前两个(换行符或执行权限),建议先排查这两点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:32:35