Docker: npm 运行 开始导致错误,EACCES:权限被拒绝,打开 '/home/node/node_modules/.cache/.eslintcache
Docker: npm run start causing error, EACCES: permission denied, open '/home/node/node_modules/.cache/.eslintcache
我已经创建了一个 React 应用程序并尝试 运行 它在 docker 带有卷的容器上(将容器内的内容与外部文件映射),之前一切正常但现在面临问题共享。
任何人都可以帮我吗?这是一个权限问题,但不知道如何解决。 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
很明显,container中的node_modules文件夹是在npm install的步骤中由root用户创建的,因此拥有root用户。
这就是我们在设置节点用户时无法访问该文件夹的原因。
要解决这个问题,我们要做的是首先使用 root 用户,我们必须在将文件从本地目录复制到图像时授予节点用户权限,然后将节点设置为用户,如下所示:
COPY --chown=node:node package.json .
RUN npm install
COPY --chown=node:node . .
USER node
这个文件不是一个非常重要的文件,如果删除它可能会导致应用程序出现重大故障。它只是一个由外部依赖项使用 eslinter 创建的缓存文件。您可以通过 运行
安全地删除
sudo rm /home/$USER/path-to-your-project/node_modules/.cache/.eslintcache
创建一个 .eslintignore
文件并将 *
放入其中。
如果你是 运行 docker-compose,经过大量调查后,在 npm 安装对我有用时更改 Dockerfile
RUN cd /usr/src/app && npm install
我已经创建了一个 React 应用程序并尝试 运行 它在 docker 带有卷的容器上(将容器内的内容与外部文件映射),之前一切正常但现在面临问题共享。 任何人都可以帮我吗?这是一个权限问题,但不知道如何解决。 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
很明显,container中的node_modules文件夹是在npm install的步骤中由root用户创建的,因此拥有root用户。 这就是我们在设置节点用户时无法访问该文件夹的原因。 要解决这个问题,我们要做的是首先使用 root 用户,我们必须在将文件从本地目录复制到图像时授予节点用户权限,然后将节点设置为用户,如下所示:
COPY --chown=node:node package.json .
RUN npm install
COPY --chown=node:node . .
USER node
这个文件不是一个非常重要的文件,如果删除它可能会导致应用程序出现重大故障。它只是一个由外部依赖项使用 eslinter 创建的缓存文件。您可以通过 运行
安全地删除sudo rm /home/$USER/path-to-your-project/node_modules/.cache/.eslintcache
创建一个 .eslintignore
文件并将 *
放入其中。
如果你是 运行 docker-compose,经过大量调查后,在 npm 安装对我有用时更改 Dockerfile
RUN cd /usr/src/app && npm install