Docker - EACCES:权限被拒绝,mkdir '/app/node_modules/.cache'

Mic*_*one 12 linux permissions docker

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

\n

下面是错误

\n
client_1  | \nclient_1  | > client@0.1.0 start\nclient_1  | > react-scripts start\nclient_1  | \nclient_1  | \xe2\x84\xb9 \xef\xbd\xa2wds\xef\xbd\xa3: Project is running at http://172.19.0.2/\nclient_1  | \xe2\x84\xb9 \xef\xbd\xa2wds\xef\xbd\xa3: webpack output is served from \nclient_1  | \xe2\x84\xb9 \xef\xbd\xa2wds\xef\xbd\xa3: Content not from webpack is served from /app/public\nclient_1  | \xe2\x84\xb9 \xef\xbd\xa2wds\xef\xbd\xa3: 404s will fallback to /\nclient_1  | Starting the development server...\nclient_1  | \nclient_1  | Failed to compile.\nclient_1  | \nclient_1  | EACCES: permission denied, mkdir '/app/node_modules/.cache'\n
Run Code Online (Sandbox Code Playgroud)\n

我的 docker-compose.yml 如下所示:

\n
version: "3"\nservices:\n  client:\n    stdin_open: true\n    build:\n      context: .\n      dockerfile: Dockerfile.dev\n    ports:\n      - "3000:3000"\n    volumes:\n      - "/app/node_modules"\n      - "./:/app"\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
FROM node:alpine\nRUN apk update && apk add git && apk add python make g++\n\nWORKDIR /app\n\nCOPY package.json /app\n\n# To Fix Permissions for Packages\nRUN npm config set unsafe-perm true\n\nRUN npm install --force\n\nCOPY . /app\n\nCMD ["npm", "run", "start"]\n
Run Code Online (Sandbox Code Playgroud)\n

And*_*gon 7

我曾经遇到过类似的问题。我的解释是,当应用程序运行时,它不会以 root 身份运行,因此当它尝试创建 .cache 目录时,它不再具有正确的凭据来执行此操作。我正在使用一个非常相似的图像 ( node:lts-alpine),并且它已经与node用户一起提供了。我所做的(但我不确定这是否符合最佳实践)是在应该找到的位置创建一个名为 .cache 的文件,更改其所有权,以便节点可以访问它并将应用程序作为 .cache 运行node。我实际上运行该应用程序,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"]
Run Code Online (Sandbox Code Playgroud)

  • 我意识到这会影响没有设置非 sudo docker 的 ubuntu 用户。如果我在“npm install”之前“RUN mkdir -p /app/node_modules”,然后“RUN chown node:node /app/node_modules”,那么它的工作效果同样好,但速度更快。 (3认同)