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

Docker容器启动报错exec: /init.sh: not found,对应Dockerfile配置问题排查

错误原因与解决方案

错误排查方向

这个报错本质是容器启动时找不到指定的/init.sh可执行文件,或者无法正常解析执行该脚本,常见原因如下:

  • COPY指令源路径配置错误:Dockerfile中的COPY /init.sh /init.sh源路径前缀/不符合Docker语法规则,COPY指令的源路径是相对于构建上下文(即执行docker build命令时指定的目录)的相对路径,带前缀/会导致Docker从构建上下文的根路径查找文件,若本地init.sh不在构建上下文根目录下,会出现复制缺失的问题。
  • 脚本换行符格式不兼容:如果在Windows环境下编写init.sh,默认使用CRLF换行符,Linux系统的脚本解析器无法识别该格式,会误以为脚本指向的解释器不存在,抛出找不到文件的错误。
  • 脚本指定的解释器不存在:如果init.sh开头的shebang声明为#!/bin/bash,但php:7.1-apache基础镜像默认未预装bash,仅自带sh,也会触发该报错。
  • .dockerignore规则屏蔽了脚本:如果项目的.dockerignore文件配置了屏蔽.sh后缀文件的规则,会导致COPY指令无法将init.sh复制到镜像内。

修复步骤

  1. 修正COPY指令写法,将COPY /init.sh /init.sh改为COPY init.sh /init.sh,同时确保执行docker build的目录下直接存放init.sh文件。
  2. 把init.sh的换行符转换为Linux兼容的LF格式:
    • VS Code可点击右下角状态栏的换行符选项,将CRLF切换为LF后保存
    • Linux/Mac环境可执行dos2unix init.sh完成格式转换
  3. 修正脚本的解释器声明,将init.sh开头的shebang改为#!/bin/sh,或者在Dockerfile的apt install软件列表中追加bash,手动安装bash环境。
  4. 检查.dockerignore文件,删除屏蔽.sh文件的规则,确保init.sh能被正常复制到镜像内。

验证方法

修复后可执行如下命令验证文件状态:

docker run --rm --entrypoint sh 你的镜像名称 -c "ls -la /init.sh && head -n 1 /init.sh"

若输出init.sh的权限为-rwxr-xr-x且首行解释器声明正常,说明修复成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:06:00