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

OpenShift pod报EACCES创建.cache目录权限错误如何解决?

问题根因
  • OpenShift默认使用无特权的随机UID运行容器,该UID默认属于gid为0的root用户组,仅拥有root组分配的权限,无法操作仅root用户可写的文件/目录
  • 你原Dockerfile中权限调整命令在npm install之前执行,npm install生成的node_modules目录及子文件由root用户创建,未继承之前设置的组可写权限,因此随机UID运行的进程无法写入node_modules/.cache目录
修复方案(无需修改SCC)

方案1:调整Dockerfile权限配置顺序(最推荐)

所有文件操作执行完成后,统一给目录分配root组可写权限,修改后的Dockerfile如下:

FROM node:14.18.0-alpine
WORKDIR /usr/src/app
# 先复制代码、执行依赖安装
COPY . /usr/src/app
RUN npm install
# 所有文件操作完成后,统一给整个应用目录分配root组可写权限
RUN chgrp -R 0 /usr/src/app \
    && chmod -R g=u /usr/src/app \
    # 提前创建npm缓存目录并赋权,避免运行时生成报错
    && mkdir -p /usr/src/app/node_modules/.cache \
    && chmod g+w /usr/src/app/node_modules/.cache
EXPOSE 4308

方案2:修改npm缓存路径到全局可写目录

将npm缓存路径指定到默认全局可写的/tmp目录,无需修改目录权限,可直接在启动命令中添加参数,或者写入Dockerfile:

  • 启动命令调整为:
npm config set cache /tmp/.npm && npm run build && PORT=4308 NODE_TLS_REJECT_UNAUTHORIZED=0 NODE_ENV=uat node server
  • 也可直接在Dockerfile中添加全局npm配置:
RUN npm config set cache /tmp/.npm --global

方案3:配置npm以避免生成运行时缓存

如果不需要构建缓存,可添加--no-cache参数禁用npm缓存,启动命令调整为:

npm run build --no-cache && PORT=4308 NODE_TLS_REJECT_UNAUTHORIZED=0 NODE_ENV=uat node server

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:27:03