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

在OpenShift上通过Dockerfile部署Create React App遇权限错误求助

解决OpenShift部署Create React App时的ESLint缓存权限拒绝问题

问题背景

我尝试使用Dockerfile在OpenShift上部署Create React App应用,OpenShift构建过程显示成功,但访问应用路由时,应用仅运行1秒就弹出编译失败错误:

Failed to compile EACCES: permission denied, open '/home/node/app/.eslintcache'

我原本已经在Dockerfile中为node镜像默认的node用户配置了目标目录的权限,但始终无法定位权限拒绝的原因。初始Dockerfile如下:

FROM node:14-alpine
RUN mkdir -p /home/node/app &&\
 chmod -R 775 /home/node/app &&\
 chown -R node:node /home/node/app
WORKDIR /home/node/app
COPY package*.json /home/node/app/
USER node
RUN npm install
COPY --chown=node:node . /home/node/app
EXPOSE 3000
CMD ["npm", "start"]

相关环境版本:

  • react-scripts: 4.0.1
  • OpenShift: 4.2、4.4、4.5(均已测试)

问题根源与解决方案

经过排查,发现OpenShift的容器运行机制是关键:OpenShift会以属于组0(root组)的随机用户ID来运行容器,而不是我们指定的用户名。这就导致即使我们给node用户配置了权限,实际运行容器的用户也没有对应的读写权限。

针对这个特性,我们需要调整Dockerfile,给组0配置目录的读写执行权限,同时指定用户ID而非用户名来运行。修正后的Dockerfile如下:

FROM node:14-alpine
RUN mkdir -p /home/node/app &&\
 chown -R node:node /home/node/app
WORKDIR /home/node/app
# 给root组配置目录读写执行权限
RUN chgrp -R 0 /home/node/app &&\
 chmod -R g+rwX /home/node/app
COPY package*.json /home/node/app/
# 使用用户ID而非用户名运行容器
USER 1000
RUN npm install
COPY --chown=node:node . /home/node/app
EXPOSE 3000
CMD ["npm", "start"]

这个调整后,容器运行时的随机用户会通过组0的权限获取到.eslintcache文件的读写权限,从而解决编译失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:32:25