Docker启动React项目镜像容器时报react-scripts: not found错误
问题原因
报错sh: react-scripts: not found的核心是容器环境内未安装项目所需的react-scripts依赖,你的Dockerfile存在明显配置缺失:拷贝package.json后仅执行了全局升级npm的操作,没有运行npm install安装项目声明的本地依赖,直接拷贝全量代码后启动自然找不到对应执行脚本。
另外两个高频触发场景可同步排查:
- 项目根目录未配置
.dockerignore,如果本地存在node_modules目录,COPY . .指令会将宿主机(Windows/macOS)平台编译的依赖包直接拷入Linux容器,平台二进制不兼容也会触发同类报错 - 若存在
package-lock.json版本与Node.js 16适配的npm版本不匹配的情况,也可能导致依赖安装不全
修复方案
- 首先在项目根目录创建
.dockerignore文件,写入以下规则,避免本地无关文件被打入镜像:
node_modules build .git .gitignore npm-debug.log .DS_Store
- 修正Dockerfile配置,补充依赖安装步骤,优化后配置如下(调整了依赖文件拷贝顺序,可复用Docker构建缓存加快后续构建速度):
FROM node:16.14-alpine3.14 WORKDIR /frontend # 优先拷贝依赖声明文件,构建时仅当依赖配置变更才会重新执行安装 COPY package*.json ./ # 升级npm后安装项目全部依赖 RUN npm install -g npm@8.12.1 && npm install # 拷贝剩余项目源码 COPY . . EXPOSE 3000 CMD [ "npm", "start" ]
- 执行以下命令跳过缓存重新构建镜像,避免旧构建层的影响:
docker build --no-cache -t react-frontend .
- 构建完成后正常启动容器即可。如果仍有报错,可进入运行中的容器执行
ls node_modules/.bin | grep react-scripts,确认依赖包是否正常安装到本地依赖目录。
内容的提问来源于stack exchange,提问作者Ferhat Adibelli
相关产品推荐
相关产品推荐

