(EACCES:权限被拒绝,mkdir'/usr/app/node_modules/.cache)如何创建docker-compose文件以使node_modules成为非根文件夹?
我正在尝试 dockerize 一个简单的 create-react-app 项目。(是运行后的初始项目npx create-react-app test,没有更改文件)。
这个问题似乎是,在新版本做出反应,他们把恼人.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
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"]
容器正在记录此错误消息:
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_modules由node用户拥有?
更新
显然,这是因为我在 Linux 系统上使用Ubuntu和 docker 以 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文件夹从本地目录复制到容器。您可以安全地将其加入书签。
以上是(EACCES:权限被拒绝,mkdir'/usr/app/node_modules/.cache)如何创建docker-compose文件以使node_modules成为非根文件夹?的全部内容。
THE END
二维码