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

Docker运行容器报错/bin/sh: ./run.sh: not found 排查求助

解决Docker运行时./run.sh: not found的问题

这个报错在Docker使用中挺常见的,我帮你梳理几个最可能的原因和对应的解决办法:

1. 脚本换行符格式不兼容(最大概率)

如果你是在Windows环境下编写的run.sh,默认会用CRLF(回车+换行)作为行尾分隔符,但Alpine Linux这类容器环境只识别LF(换行)。当shell尝试执行脚本时,会把\r当成脚本路径的一部分,自然就找不到./run.sh\r这个不存在的文件了。

解决办法:

  • 用代码编辑器(比如VSCode、Notepad++)打开run.sh,将文件格式切换为Unix (LF):
    • VSCode:点击右下角的CRLF标识,选择LF即可;
    • Notepad++:菜单栏→编辑→文档格式转换→转换为UNIX格式。
  • 或者在Dockerfile里添加一步自动转换(需要先安装工具):
    RUN apk add --no-cache dos2unix
    RUN dos2unix run.sh
    

2. run.sh的路径配置问题

你的Dockerfile里执行ADD run.sh run.sh,会把脚本拷贝到容器的默认工作目录(也就是/)下,虽然CMD ./run.sh理论上能找到它,但如果你的Docker构建上下文里run.sh没被正确包含(比如.dockerignore里排除了它),或者路径逻辑不够清晰,也可能出问题。

解决办法:

  • 先确认run.sh在Docker构建的上下文目录中,且.dockerignore没有排除这个文件;
  • 更稳妥的方式是先设置工作目录,再拷贝脚本:
    WORKDIR /usr/local/licensingservice
    ADD run.sh ./
    RUN chmod +x run.sh
    CMD ./run.sh
    
    这样脚本会被放到你创建的业务目录下,执行路径更清晰,也避免了默认目录的潜在问题。

3. 脚本shebang的兼容性问题

你的脚本开头是#!/bin/sh,Alpine里的/bin/sh是BusyBox提供的兼容版本,正常是没问题的,但如果遇到特殊环境,可以换成Alpine默认的#!/bin/ash(和sh完全兼容)。

你可以先试试第一个换行符的方案,大部分情况下这个就能解决问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:31:43