【问题标题】:Docker: npm run start causing error, EACCES: permission denied, open '/home/node/node_modules/.cache/.eslintcacheDocker:npm run start 导致错误,EACCES:权限被拒绝,打开 '/home/node/node_modules/.cache/.eslintcache
【发布时间】:2021-09-04 06:44:35
【问题描述】:

我创建了一个 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

【问题讨论】:

  • 尝试运行chmod 777 /app/node_modules,也请不要在问题中发布图片,将文字复制到这里
  • 此命令不起作用,显示不允许操作。我添加了更多细节来质疑它是否有助于解决。
  • 你试过sudo吗?喜欢sudo chmod 777 /app/node/node_moduels
  • 您是否有一个.dockerignore 文件从图像中排除了主机的node_modules 目录? docker run -v 选项将图像内容替换为其他地方的内容,这使得该设置不是特别具有可重复性;删除这些选项有帮助吗?
  • 上述方法均无效。

标签: reactjs docker permissions dockerfile npm-start


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 在我的情况下,如果在构建期间发生 EACCESS 错误,服务器将无法启动...我必须修复权限。似乎忽略它并不总是一种选择!
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多