Docker运行NestJs样板项目报错,求助问题排查
NestJs样板项目Docker运行错误排查
我使用用于教学的NestJs样板项目,通过Dockerfile运行时出现错误,已通过CLI查看/usr/src/app/package.json,确认存在start:prod脚本,请问问题出在哪里?
错误日志
/usr/bin/env: 'bash\r': No such file or directory npm ERR! 缺少脚本: "start:prod" npm ERR! npm ERR! 你是不是想输入这个? npm ERR! npm run start:prod # 运行"start:prod"包脚本 npm ERR! npm ERR! 查看所有脚本,请运行: npm ERR! npm run npm ERR! 本次运行的完整日志可在以下位置查看: npm ERR! /root/.npm/_logs/2022-07-20T12_20_18_944Z-debug-0.log
问题原因
- Windows换行符(CRLF)冲突:第一个错误
/usr/bin/env: 'bash\r': No such file or directory是核心问题。项目文件在Windows环境下编辑过,脚本文件的换行符是\r\n(CRLF),而Linux容器中的bash只能识别\n(LF)换行符,导致bash后面被加上了\r转义字符,系统找不到名为bash\r的命令。 - 脚本识别异常:由于换行符问题导致启动命令执行失败,进而让npm误以为package.json中不存在
start:prod脚本,出现第二个错误提示。
解决方案
- 统一文件换行符为LF:
- 使用VS Code等编辑器,将项目中所有脚本文件(包括package.json、Dockerfile相关脚本)的换行符设置为LF;
- 在Git中配置自动转换:执行
git config --global core.autocrlf false,避免Windows环境下自动将LF转为CRLF。
- 检查Dockerfile启动命令:确保启动命令为
CMD ["npm", "run", "start:prod"]或RUN npm run start:prod,命令中无多余转义字符或换行符。 - 重新构建镜像:清理Docker缓存后重新构建,执行
docker build --no-cache .,确保新的文件被正确复制到容器中。
内容的提问来源于stack exchange,提问作者Vladimir Petukhov
相关产品推荐
相关产品推荐

