Docker容器启动即退出(Exited 127):./env.sh未找到问题求助
问题排查与解决
报错/bin/sh: ./env.sh: not found的核心原因是Windows的CRLF换行符与Linux容器的LF换行符不兼容,再加上可能的脚本权限问题,具体分析和解决步骤如下:
1. 换行符不兼容导致解释器识别失败
Windows下保存的env.sh使用CRLF(\r\n)换行,容器内的Linux系统会把脚本第一行的#!/bin/sh识别成#!/bin/sh\r,系统找不到带\r后缀的解释器,因此抛出“not found”错误。
解决办法:
- VS Code直接转换:打开
env.sh,点击右下角状态栏的「CRLF」选项,切换为「LF」后保存文件。 - Git配置自动转换:如果用Git管理代码,执行
git config core.autocrlf input,让Git拉取代码时自动将CRLF转为LF(提交时保留LF格式),之后重新拉取或提交文件。 - Dockerfile内处理:若无法修改本地文件,可在Dockerfile中添加换行符转换命令(需先安装工具):
RUN apt-get update && apt-get install -y dos2unix RUN dos2unix ./env.sh
2. 脚本缺少可执行权限
Windows下文件权限不会被系统识别,env.sh复制到容器后可能没有执行权限,也会导致无法运行。
解决办法:
在Dockerfile中添加权限设置命令:
RUN chmod +x ./env.sh
3. 优化CMD命令写法
将CMD改为显式调用shell执行命令,避免路径或解析异常:
CMD sh -c './env.sh > ./public/env.js && yarn start'
按以上步骤调整后,重新构建镜像并运行,即可解决容器启动后立刻停止的问题。
内容的提问来源于stack exchange,提问作者Antoine
相关产品推荐
相关产品推荐

