Docker启动容器报错:exec: entrypoint.sh未在$PATH中找到
问题根因
报错由两个常见原因共同导致:
- Linux系统默认不会将当前工作目录加入
$PATH环境变量,你在docker-compose.yml中直接写command: entrypoint.sh时,系统会去PATH指定的目录找这个文件,找不到就抛出该错误 - 你给backend服务配置了
./backend:/code的本地目录挂载,镜像构建阶段执行的RUN chmod u+x ./entrypoint.sh会被本地挂载的文件覆盖,如果你本地的entrypoint.sh没有执行权限,容器内的对应文件也会失去执行权限
解决方案
按以下步骤调整即可:
- 第一步:修正
docker-compose.yml中backend的command配置,指定文件路径,要么用相对路径加前缀,要么用绝对路径:# 二选一即可 command: ./entrypoint.sh # command: /code/entrypoint.sh - 第二步:处理执行权限问题,根据你的使用场景二选一:
- 开发场景需要本地代码实时同步到容器:给本地的entrypoint.sh添加执行权限,类Unix系统(Mac/Linux/WSL)直接在项目根目录执行
chmod +x backend/entrypoint.sh;Windows系统可以将command调整为自动加权限再执行:command: sh -c "chmod +x entrypoint.sh && ./entrypoint.sh" - 不需要实时同步代码:直接删除backend服务下的
volumes挂载配置,直接使用镜像构建阶段打包好的、已经加过执行权限的文件即可
- 开发场景需要本地代码实时同步到容器:给本地的entrypoint.sh添加执行权限,类Unix系统(Mac/Linux/WSL)直接在项目根目录执行
补充检查
确认你的entrypoint.sh第一行添加了正确的shebang声明,你使用的alpine镜像默认没有安装bash,不要写#!/bin/bash,用:
#!/bin/sh
内容的提问来源于stack exchange,提问作者A.K.M. Adib
相关产品推荐
相关产品推荐

