You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:12:28