【问题标题】:Docker - EACCES: permission denied, mkdir '/app/node_modules/.cache'Docker - EACCES:权限被拒绝,mkdir '/app/node_modules/.cache'
【发布时间】:2021-07-15 04:05:33
【问题描述】:

我今天刚开始使用 docker,但因权限问题而被阻止。我不知道我应该输入什么来切换权限。我假设这是一个chown的事情。还有其他关于堆栈溢出的问题,但它们对我没有帮助,因为它们不是 Docker 特定的,或者没有针对该问题的选定答案。

下面是错误

client_1  | 
client_1  | > client@0.1.0 start
client_1  | > react-scripts start
client_1  | 
client_1  | ℹ 「wds」: Project is running at http://172.19.0.2/
client_1  | ℹ 「wds」: webpack output is served from 
client_1  | ℹ 「wds」: Content not from webpack is served from /app/public
client_1  | ℹ 「wds」: 404s will fallback to /
client_1  | Starting the development server...
client_1  | 
client_1  | Failed to compile.
client_1  | 
client_1  | EACCES: permission denied, mkdir '/app/node_modules/.cache'

我的 docker-compose.yml 看起来像这样:

version: "3"
services:
  client:
    stdin_open: true
    build:
      context: .
      dockerfile: Dockerfile.dev
    ports:
      - "3000:3000"
    volumes:
      - "/app/node_modules"
      - "./:/app"

我的 Dockerfile.dev 看起来像这样:

FROM node:alpine
RUN apk update && apk add git && apk add python make g++

WORKDIR /app

COPY package.json /app

# To Fix Permissions for Packages
RUN npm config set unsafe-perm true

RUN npm install --force

COPY . /app

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

【问题讨论】:

    标签: linux docker permissions


    【解决方案1】:

    我曾经遇到过类似的问题。我的解释是,当应用程序运行时,它不是以 root 身份运行的,因此当它尝试创建 .cache 目录时,它不再具有执行此操作的正确凭据。我使用了一个非常相似的图像 (node:lts-alpine),它已经带有一个 node 用户。我做了什么,但我不确定这是否符合最佳实践,是在应该找到它的地方创建一个名为 .cache 的文件,更改它的所有权,以便节点可以访问它并以@987654323 运行应用程序@。我实际上以node 运行该应用程序,因为我将其部署到heroku,并且容器没有以root 身份运行。在您的情况下,它看起来像:

    FROM node:alpine
    RUN apk update && apk add git && apk add python make g++
    
    WORKDIR /app
    
    COPY package.json /app
    
    # To Fix Permissions for Packages
    RUN npm config set unsafe-perm true
    
    RUN npm install --force
    
    COPY . /app
    
    RUN chown -R node /app/node_modules
    
    USER node
    
    CMD ["npm", "run", "start"]
    

    【讨论】:

    • 感谢 Andre 的尝试,但我遇到了同样的错误 :( 我做了这个 cmd... sudo docker-compose build --no-cache 然后是 sudo docker-compose up跨度>
    • 改用RUN chown -R node /app/node_modules。可能需要更长的时间,但不会太多。然后你可以把RUN mkdir -p /app/node_modules/.cache的线拿出来。
    • 尝试添加以下内容:RUN chown -R node:node /app/node_modules 而不是 RUN chown -R node /app/node_modulesRUN chmod -R 744 /app/node_modules 如果这不起作用,您的容器可能没有以用户 node 运行。在这种情况下,您可以尝试 RUN chmod -R 777 /app/node_modules 只是让您的容器启动,而不是尝试找出用户是否用于运行容器,然后授予权限以向该用户写入执行。让我知道这是否有效!!!
    • 我意识到这影响了没有设置非 sudo docker 的 ubuntu 用户。如果我在npm install 之前先RUN mkdir -p /app/node_modules 然后RUN chown node:node /app/node_modules 然后它工作得同样好但要快得多。
    【解决方案2】:

    我遇到了同样的错误,把 docker 文件放在下面解决了它。

    RUN npm config set unsafe-perm true
    
    RUN npm install --force
    
    COPY ./ /usr/app/
    
    RUN chown -R node /usr/app/node_modules
    
    USER node
    

    【讨论】:

      猜你喜欢
      • 2019-09-19
      • 2021-08-10
      • 2021-12-31
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      相关资源
      最近更新 更多