【问题标题】:Deploying Create React App on OpenShift: EACCES: permission denied, open '/home/node/app/.eslintcache'在 OpenShift 上部署 Create React App:EACCES:权限被拒绝,打开“/home/node/app/.eslintcache”
【发布时间】:2020-11-28 23:51:44
【问题描述】:

我正在尝试使用 Dockerfile 在 OpenShift 上部署 Create React App webapp。 OpenShift 构建成功完成,当我访问该路线时,我可以看到应用程序运行了 1 秒钟,然后屏幕上出现此错误:

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

我不明白为什么会出现权限被拒绝错误,因为我已经将所需的目录权限分配给了我的 Dockerfile 中节点 Docker 映像提供的 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"]

软件版本:
反应脚本 4.0.1
OpenShift 4.2、4.4、4.5(全部试用)

这是我用作参考的tutorialsource repo


更新:
感谢 Will Gordon 的回答,我能够弄清楚。 OpenShift 希望您指定用户 ID 而不是名称。此外,OpenShift 将容器作为属于组 0 的随机 ID 运行,因此需要指定该组的权限。这是工作的 Dockerfile:

FROM node:14-alpine

RUN mkdir -p /home/node/app &&\
 chown -R node:node /home/node/app
WORKDIR /home/node/app

RUN chgrp -R 0 /home/node/app &&\
 chmod -R g+rwX /home/node/app

COPY package*.json /home/node/app/
USER 1000
RUN npm install

COPY --chown=node:node . /home/node/app
EXPOSE 3000
CMD ["npm", "start"]

【问题讨论】:

  • 你需要在安装 npm 之前 cd 进入 /home/node/app/
  • 这不是WORKDIR /home/node/app 的用途吗?我的 Dockerfile 与this question 中的解决方案非常相似。此外,Dockerfile 在构建时没有给出错误,所以我假设权限很好。导致问题的原因是最新的react-scripts 版本开始创建的新.eslintcache 文件。

标签: node.js reactjs docker openshift create-react-app


【解决方案1】:

您正在为该用户设置特定用户和权限。 OpenShift 的默认配置是运行具有随机 UID 的容器。建议在设置权限时使用根 GID (GID 0) 而不是 UID,因为 OpenShift 会自动将 GID 0 应用到用户。

您可以在文档https://docs.openshift.com/container-platform/3.11/creating_images/guidelines.html#openshift-specific-guidelines 中找到有关为 OpenShift 创建映像的更多指南

【讨论】:

  • 谢谢!正是我需要的。我已经用工作中的 Dockerfile 更新了这个问题。
猜你喜欢
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 2019-07-06
  • 1970-01-01
  • 2013-01-08
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多