Docker容器中npm run命令执行异常问题排查求助
Docker部署Vite React应用:npm run脚本无执行效果排查
问题现象
- 使用Vite构建React应用,Docker部署时执行
npm run build无实际构建效果,手动进入容器执行该命令也仅输出脚本命令本身,无后续构建操作 - 直接执行
tsc && vite build可正常完成构建,npm run dev等其他npm脚本也存在相同的无执行问题 - 已尝试Node Alpine与Debian镜像,配置了node用户权限,且
npm config get ignore-scripts返回false
相关配置文件
Dockerfile.prod
FROM node:20-bullseye WORKDIR /app/frontend/ COPY package.json package-lock.json* /app/frontend/ RUN npm install RUN npm install -g vite RUN npm install -g typescript COPY . . RUN chown -R node:node /app/frontend/ USER node CMD ["npm", "run", "build"]
docker-compose.yaml
version: "3.4" name: fisy-prod services: backend: volumes: - static:/static env_file: - ./.env build: context: ./backend dockerfile: Dockerfile.prod ports: - "8000:8000" frontend: build: context: ./frontend dockerfile: Dockerfile.prod volumes: - frontend:/app/frontend/dist nginx: build: context: ./nginx volumes: - static:/static - frontend:/var/www/frontend ports: - "5173:80" depends_on: - backend - frontend volumes: static: frontend:
排查方向
- 确认package.json脚本定义:检查
scripts字段中的build是否为"build": "tsc && vite build",排除拼写错误、多余转义字符等导致npm无法解析的问题 - 查看npm详细日志:执行
npm run build --verbose,通过详细日志排查是否有隐藏的权限、依赖缺失等错误 - 验证全局依赖在node用户环境的可用性:切换到node用户后,全局安装的vite/tsc可能不在PATH中。可改为在node用户下安装全局依赖:
RUN su node -c "npm install -g vite typescript",或直接使用项目本地依赖的命令(如npx vite build) - 优先使用本地依赖:项目已通过
npm install安装vite和typescript,无需全局安装。修改package.json脚本为"build": "./node_modules/.bin/tsc && ./node_modules/.bin/vite build",或用npx调用本地命令 - 检查文件执行权限:执行
RUN chmod +x ./node_modules/.bin/*确保本地依赖的二进制文件具备执行权限 - 容器内手动调试:进入容器后执行
npm run build,仔细观察所有输出,包括可能被忽略的错误提示
内容的提问来源于stack exchange,提问作者dontic
相关产品推荐
相关产品推荐

