解决Docker构建React镜像时NPM INSTALL返回非零代码: 1的问题

45次阅读
没有评论

问题描述

在学习使用Docker时,你尝试上传一个React容器,但在创建镜像时,在NPM INSTALL步骤中出现了错误。具体错误信息如下:

npm ERR! code FETCH_ERROR
npm ERR! errno FETCH_ERROR
npm ERR! invalid json response body at https://registry.npmjs.org/@babel%2fplugin-proposal-async-generator-functions reason: Invalid response body while trying to fetch https://registry.npmjs.org/@babel%2fplugin-proposal-async-generator-functions: read ETIMEDOUT

npm ERR! A complete log of this run can be found in: npm ERR! /root/.npm/_logs/2022-10-20T01_01_31_933Z-debug-0.log
The command '/bin/sh -c npm install' returned a non-zero code: 1

你还提供了Dockerfile和docker-compose.yml的内容,如下:

Dockerfile:

FROM node:16
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

docker-compose.yml:

version: "3"
services:
  eplay-app:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - ./src:/app/src:ro

解决方案

这个问题通常是由于NPM包的下载超时或网络问题导致的。以下是解决这个问题的一些步骤:

  1. 更换NPM源:由于NPM默认的包源可能在某些地区访问不稳定,你可以尝试切换为其他NPM源,例如淘宝NPM镜像。你可以在Dockerfile中添加如下命令来更改NPM源:
RUN npm config set registry https://registry.npm.taobao.org

将这行添加到Dockerfile中的RUN npm install之前。

  1. 增加NPM超时时间:有时,NPM包下载需要更长的时间,你可以通过在Dockerfile中增加NPM的超时时间来解决这个问题。例如:
RUN npm install --verbose --legacy-peer-deps --timeout=120000

这将增加NPM的超时时间为120秒。你可以根据实际情况调整这个值。

  1. 检查网络连接:确保你的Docker容器能够访问互联网,并且没有防火墙或代理导致的网络问题。你可以在Dockerfile中添加一个小的网络测试,例如:
RUN ping -c 3 google.com

这将在构建镜像时尝试ping Google,以确保网络连接正常。

  1. 检查NPM包依赖:如果你的项目中使用了一些依赖,可能其中的某个依赖已经过时或不再维护,导致下载失败。尝试升级这些依赖或查找替代方案。

经过上述步骤的尝试,你应该能够解决这个问题。如果问题仍然存在,建议查看NPM的错误日志以获取更详细的信息,以便进一步排除问题。

正文完