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

Django项目推送容器至Heroku时莫名出现run.sh not found错误如何解决

问题修复方案

核心故障原因

你遇到的/bin/sh: run.sh: not found报错、进程退出码127,排除路径、权限配置问题后,最高发的诱因是shell脚本换行符不兼容:合并分支时如果有Windows环境提交的run.sh代码,git未自动转换换行符的情况下,文件会保留Windows风格的\r\n(CRLF)换行符,Alpine Linux的shell无法识别。
此时脚本首行#!/bin/sh末尾会被带上不可见的\r字符,系统会尝试寻找/bin/sh\r这个不存在的解释器,最终抛出「文件不存在」的错误,这也是你调整文件路径、重命名都无效的核心原因。

修复步骤

  1. 转换run.sh的换行符为Linux风格(LF)
    • VS Code操作:打开scripts/run.sh,点击右下角状态栏的「CRLF」标识,切换为「LF」后保存文件
    • 命令行操作:安装dos2unix工具后执行 dos2unix scripts/run.sh
  2. 配置git换行符规则,避免后续重复出现同类问题:
    # Windows用户执行:提交时自动转LF,检出时自动转CRLF
    git config --global core.autocrlf true
    # Linux/Mac用户执行:提交时自动转LF,检出时不转换
    git config --global core.autocrlf input
    # 禁止提交混合换行符的文件,提前拦截问题
    git config --global core.safecrlf true
    
  3. 兜底兼容方案:可以直接修改Dockerfile的CMD指令,显式指定解释器执行脚本,绕开shebang解析逻辑:
    将原CMD ["run.sh"]替换为:
    CMD ["sh", "/scripts/run.sh"]
    
  4. 额外排查项:检查项目根目录的.dockerignore、.gitignore文件,确认合并分支后没有新增scripts/相关的忽略规则,避免构建镜像时未将run.sh打包到镜像内。
    修改完成后重新提交代码、构建镜像推送到Heroku即可正常启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:54:02