Docker:npm run start causing error,EACCES:权限被拒绝,打开'/home/node/node_modules/.cache/.eslintcache

57hvy0tb  于 2023-05-16  发布在  Docker
关注(0)|答案(7)|浏览(283)

我创建了一个react应用程序,并试图在docker容器上运行它(将容器内的内容与外部文件Map),之前一切都很好,但现在面临着共享的问题。有人能帮我吗?这是一个权限问题,但不知道如何解决。root用户有权访问node_modules文件夹。如何给予节点用户访问权限?
我的docker文件

FROM node:alpine

USER node
WORKDIR '/home/node'

COPY package.json .
RUN npm install

COPY . .

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

使用的命令:

docker build -t frontend -f Dockerfile.dev .
docker run -p 3000:3000 -v /home/node/node_modules -v $(pwd):/home/node frontend:latest

错误:

容器中的访问:

~ $ ls -l
total 1488
-rw-rw-r--    1 node     node           124 Jun 20 08:37 Dockerfile.dev
-rw-rw-r--    1 node     node          3369 Jun 17 18:25 README.md
drwxr-xr-x    3 node     node          4096 Jun 17 18:45 build
-rw-rw-r--    1 node     node           230 Jun 20 06:56 docker-compose.yml
drwxrwxr-x 1041 root     root         36864 Jun 20 19:15 node_modules
-rw-rw-r--    1 node     node       1457680 Jun 18 18:28 package-lock.json
-rw-rw-r--    1 node     node           811 Jun 17 18:26 package.json
drwxrwxr-x    2 node     node          4096 Jun 17 18:25 public
drwxrwxr-x    2 node     node          4096 Jun 17 18:25 src
4ioopgfo

4ioopgfo1#

很明显,容器中的node_modules文件夹是由root用户在npm install步骤中构建的,因此具有root用户。这就是我们在设置节点用户时无法访问该文件夹的原因。要解决这个问题,我们必须首先使用root用户,我们必须在将文件从本地目录复制到映像时向节点用户给予权限,然后将节点设置为用户,如下所示:

COPY --chown=node:node package.json .
RUN npm install

COPY --chown=node:node . .
USER node
t5zmwmid

t5zmwmid2#

此文件不是一个非常重要的文件,如果删除该文件,可能会导致重大应用程序故障。它只是一个由外部依赖项使用eslinter创建的缓存文件。你可以通过运行

sudo rm /home/$USER/path-to-your-project/node_modules/.cache/.eslintcache
vs3odd8k

vs3odd8k3#

创建一个.eslintignore文件并将*放入其中。

qni6mghb

qni6mghb4#

如果你正在运行docker-compose,在我做了大量的调查之后,在npm安装时更改Dockerfile对我来说是有效的

RUN cd /usr/src/app && npm install
8wigbo56

8wigbo565#

只需在Dockerfile中插入以下行:

RUN chmod 777 /app/node_modules

前行:

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

重建它,不需要再碰任何东西

jxct1oxe

jxct1oxe6#

这个错误困扰着我,而我正在开发一个React的Web应用程序,所以在这里的eslint是要求很少的权限,我无法找到什么样的权限是必需的,所以我决定给予所有可用的权限,这对我来说是有效的。

sudo chmod -R 777 /yourProjectDirectoryName

这里的项目目录是从主目录到当前文件夹的目录。
如果这不起作用,请尝试执行此操作,https://idqna.madreview.net/

kwvwclae

kwvwclae7#

我在命令中使用“sudo”轻松解决了这个问题:

sudo npm start

相关问题