gpt4 book ai didi

docker - (EACCES : permission denied, mkdir '/usr/app/node_modules/.cache) 如何创建 docker-compose 文件以使 node_modules 成为非根文件夹?

转载 作者:行者123 更新时间:2023-12-04 12:13:57 24 4
gpt4 key购买 nike

我正在尝试 dockerize 一个简单的 create-react-app 项目。 ( 是运行后的初始项目 npx create-react-app test ,没有文件被更改 )。
问题似乎是在 React 的较新版本中,他们动了烦人的.eslintcache从根文件夹到 /node_modules/.cache ,当容器试图通过 docker-compose 运行应用程序时导致问题.
文件

FROM node:alpine

WORKDIR /usr/app

COPY package*.json ./

RUN npm install

RUN chown -R node.node /usr/app/node_modules

COPY . ./

CMD ["npm", "start"]
docker-compose
version: '3'
services:
test:
stdin_open: true
build:
context: .
dockerfile: Dockerfile
environment:
- CHOKIDAR_USEPOLLING=true
volumes:
- /usr/app/node_modules
- .:/usr/app
ports:
- '3000:3000'
容器正在记录此错误消息:
test_1   | Failed to compile.
test_1 |
test_1 | EACCES: permission denied, mkdir '/usr/app/node_modules/.cache
如您所见,我尝试设置 node_modules文件夹所有者为节点用户( node:alpine 的默认用户),但它不起作用;探索容器,可以看到 node_modules文件夹仍归 root 所有:
drwxrwxr-x    5 node     node          4096 Apr 14 07:04 .
drwxr-xr-x 1 root root 4096 Apr 14 07:08 ..
-rw-rw-r-- 1 node node 310 Apr 14 06:56 .gitignore
-rw-rw-r-- 1 node node 192 Apr 14 07:30 Dockerfile
-rw-rw-r-- 1 node node 3369 Apr 14 06:56 README.md
drwxrwxr-x 1061 root root 36864 Apr 14 07:12 node_modules
-rw-rw-r-- 1 node node 692936 Apr 14 06:56 package-lock.json
-rw-rw-r-- 1 node node 808 Apr 14 06:56 package.json
drwxrwxr-x 2 node node 4096 Apr 14 06:56 public
drwxrwxr-x 2 node node 4096 Apr 14 06:56 src
我也尝试创建文件夹 RUN mkdir -p /usr/app并使用 USER node但这最终导致 npm 无法创建 node_modules 的问题。文件夹。
是否有任何解决方法 .eslintcache被禁用或 node_modulesnode 所有用户?
更新
显然,这是因为我正在使用 Ubuntu 并且 docker 在 Linux 系统上以 root 身份挂载卷。

最佳答案

RUN npm install 之后添加这一行在你的 Dockerfile 中可以解决这个问题:

RUN mkdir -p node_modules/.cache && chmod -R 777 node_modules/.cache
最终的 Dockerfile
FROM node:alpine

WORKDIR /usr/app

COPY package.json .
RUN npm install

RUN mkdir node_modules/.cache && chmod -R 777 node_modules/.cache

COPY . .

CMD ["npm", "run", "start"]
那么你就不需要复制 node_modules文件夹从本地目录到容器。您可以安全地将其加入书签。

关于docker - (EACCES : permission denied, mkdir '/usr/app/node_modules/.cache) 如何创建 docker-compose 文件以使 node_modules 成为非根文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67087735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com