Docker构建过程中npm无法在容器内安装的问题求助
Docker容器内npm安装失败问题(Django+React+Vite项目)
我在构建Django、React和Vite应用时,碰到了Docker容器内npm安装失败的问题。一开始npm和Node.js都没法在容器里运行,在Dockerfile里加了两条COPY命令后,Node.js的问题解决了,但不管怎么调整配置,npm安装失败的问题一直没搞定。
容器内Node.js版本检查:
% docker exec -it docktest-web-1 node -v v14.21.3
容器内npm版本检查:
% docker exec -it docktest-web-1 npm -v OCI runtime exec failed: exec failed: unable to start container process: exec: "npm": executable file not found in $PATH: unknown
构建能成功完成,但容器里根本没装npm。
相关配置文件
Dockerfile
# 使用官方Node.js镜像构建前端 FROM node:14 as frontend-build # 设置前端构建工作目录 WORKDIR /frontend # 仅复制package.json,利用Docker缓存机制 COPY frontend/package.json ./ # 复制剩余前端代码到容器 COPY frontend/ . # 安装前端依赖 RUN npm cache clean --force RUN npm install vite -g RUN npm install npm@latest -g # 构建前端 RUN npm run build # 创建Django和PostgreSQL的主容器 FROM python:3 # 设置环境变量 ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 ENV NODE_PATH=/usr/local/lib/node_modules # 没有这两行的话,Node.js也会安装失败 COPY --from=frontend-build /usr/local/bin/node /usr/local/bin/ COPY --from=frontend-build /usr/local/lib/node_modules/ /usr/local/lib/node_modules/ # 设置Django工作目录 WORKDIR /code # 复制后端依赖文件并安装 COPY requirements.txt /code/ RUN pip3 install -r requirements.txt # 将前一阶段构建的前端文件复制到主容器工作目录 COPY --from=frontend-build /frontend/ /code/frontend/ # 复制项目文件 COPY . /code/
docker-compose.yml
services: db: image: postgres volumes: - ./data/db:/var/lib/postgresql/data environment: - POSTGRES_DB=postgres - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/code - /code/frontend/ # 排除前端文件夹挂载,避免冲突 ports: - "8000:8000" environment: - POSTGRES_NAME=postgres - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres depends_on: - db
补充说明(8/1更新)
- 如果你碰到类似问题,参考已采纳答案后,Vite.js GitHub仓库里的
create-vite模板对配置包含Vite和React依赖的package.json很有帮助。 - 要是遇到下面这个Vite/React错误,可参考Stack Overflow上关于配置Vite允许JSX语法的解决方案:
[ERROR] The JSX syntax extension is not currently enabled
内容的提问来源于stack exchange,提问作者DAK
相关产品推荐
相关产品推荐

