Docker构建Node项目镜像时npm install卡住,寻求解决方法
Node项目Docker构建时npm install卡住的问题排查与解决
我在给Node项目构建Docker镜像时,执行npm install步骤一直卡住。添加--verbose参数后,发现卡在包资源获取阶段(日志显示正在从npm registry请求包文件)。
相关配置文件
Dockerfile
FROM node:latest WORKDIR /usr/src/app COPY package.json ./ RUN npm install --verbose COPY . . EXPOSE 5678 CMD ["npm", "start"]
.dockerignore
node_modules product-api.log jest.config.js __test__
package.json
{ "scripts": { "start": "node server.js", "test": "cross-env NODE_OPTIONS=--experimental-vm-modules npx jest" }, "name": "6---desafio", "version": "1.0.0", "main": "app.js", "keywords": [], "author": "", "license": "ISC", "description": "", "type": "module", "dependencies": { "cross-env": "^7.0.3", "express": "^4.18.2", "pg": "^8.10.0", "sequelize": "^6.29.3", "winston": "^3.8.2" }, "devDependencies": { "jest": "^29.5.0", "supertest": "^6.3.3" } }
排查与解决方法
- 换用国内npm镜像源:默认npm registry访问不稳定,换成国内镜像加速下载。修改Dockerfile的
RUN命令:RUN npm config set registry https://registry.npmmirror.com/ && npm install --verbose - 使用固定Node LTS版本:
node:latest可能是未稳定的版本,换成LTS版本的alpine镜像(体积更小,稳定性更好):FROM node:20-alpine - 清理缓存并跳过可选依赖:可选依赖下载失败可能导致卡住,先清理缓存再安装:
RUN npm cache clean --force && npm install --verbose --no-optional - 配置网络代理:如果在受限网络环境下,构建时传递代理参数:
同时在Dockerfile开头添加代理环境变量声明:docker build --build-arg HTTP_PROXY=http://你的代理地址:端口 --build-arg HTTPS_PROXY=http://你的代理地址:端口 .ARG HTTP_PROXY ARG HTTPS_PROXY ENV HTTP_PROXY=$HTTP_PROXY ENV HTTPS_PROXY=$HTTPS_PROXY - 仅安装生产依赖:如果镜像只用于运行服务,不需要开发依赖,用生产模式安装:
RUN npm install --production --verbose
内容的提问来源于stack exchange,提问作者Ale
相关产品推荐
相关产品推荐

