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

React应用Docker构建报错EACCES: permission denied mkdir '/app/node_modules/.cache'

问题根因

你遇到的EACCES: permission denied, mkdir '/app/node_modules/.cache'错误,核心原因是node:alpine官方镜像默认运行容器时使用非root的node用户,而Docker构建阶段执行npm install是root权限操作,生成的/app/node_modules目录所有者为root,运行时node用户没有写入权限创建缓存目录。

你之前在宿主机执行的所有chown改权限、重装node_modules的操作均无效,是因为你在docker-compose中声明了/app/node_modules为匿名卷,该目录完全运行在容器存储层,和宿主机目录无关,宿主机的修改不会影响容器内的目录权限。


解决方案

可任选以下任意一种方案解决:

方案1:调整Dockerfile配置(更安全,推荐生产/开发通用)

修改你的Dockerfile.dev内容如下,给node用户授予目录权限并切换为非root用户运行:

FROM node:alpine

WORKDIR '/app'

COPY package.json .
RUN npm install \
    # 给node用户授予node_modules目录读写权限
    && chown -R node:node /app/node_modules

COPY . .
# 切换为node用户运行后续命令
USER node

CMD ["npm", "run", "start"]

方案2:调整docker-compose配置(适合临时调试快速生效)

在docker-compose.yml的web服务配置中新增user: root参数,指定容器以root用户运行,跳过权限校验:

version: "3"
services:
  web:
    stdin_open: true
    user: root # 新增该行
    environment:
      - CHOKIDAR_USEPOLLING=true
    build:
      context: .
      dockerfile: Dockerfile.dev
    ports:
      - "4000:4000"
    volumes:
      - /app/node_modules
      - .:/app

生效步骤

修改配置后需要先清理旧的构建缓存和匿名卷,避免旧缓存残留导致配置不生效:

  1. 执行docker-compose down -v停止容器并删除关联的匿名卷
  2. 执行docker-compose up --build重新构建启动容器即可

内容的提问来源于stack exchange,提问作者FD3

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 15:36:03