【问题标题】:npm permission issue in laravel docker setuplaravel docker setup 中的 npm 权限问题
【发布时间】:2021-03-13 12:22:42
【问题描述】:

如果我尝试在我的 docker 设置中运行以下命令

    docker-compose run --rm npm run dev

我收到以下错误

> dev
> npm run development

glob error [Error: EACCES: permission denied, scandir '/root/.npm/_logs'] {
errno: -13,
code: 'EACCES',
syscall: 'scandir',
path: '/root/.npm/_logs'
 }

> development
 > cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide- 
 modules --config=node_modules/laravel-mix/setup/webpack.config.js

sh: 1: cross-env: not found
npm ERR! code 127
npm ERR! path /var/www/html
npm ERR! command failed
npm ERR! command sh -c cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js -- 
progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js

似乎是权限问题,但我如何在哪里授予权限,对于 root,不确定它在哪里

这是我在 docker 中添加 npm 的 docker-compose.yml 所以不确定在哪里授予 /root/.npm/_logs 权限,因为这似乎在 docker 之外的应用程序中?

  version: '3'

  networks:
  laravel:

services:
 nginx:
image: nginx:stable-alpine
container_name: nginx
ports:
  - "8080:80"
volumes:
  - ./src:/var/www/html
  - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
  - php
  - mysql
networks:
  - laravel

mysql:
image: mysql:5.7.22
container_name: mysql
restart: unless-stopped
tty: true
ports:
  - "3307:3306"
env_file:
  - src/.env
networks:
  - laravel

php:
build:
  context: .
  dockerfile: Dockerfile
container_name: php
volumes:
  - ./src:/var/www/html
ports:
  - "9000:9000"
networks:
  - laravel
npm:
 image: node:latest
container_name: npm
volumes:
  - ./src:/var/www/html
working_dir: /var/www/html
entrypoint: [ 'npm', '--no-bin-links' ]
networks:
  - laravel

【问题讨论】:

  • 我认为您需要授予此文件夹/root/.npm/_logs的权限。
  • 在哪里以及如何?
  • chmod -R 777 /root/.npm/_logs
  • 本地机器中没有该名称的内容,或具有该文件夹名称的 docker 容器
  • 尝试更新你的节点docker镜像:docker pull node:latest

标签: laravel docker npm


【解决方案1】:

我用npm run --cache /var/cache/ COMMAND试了一下,问题就解决了!

【讨论】:

    【解决方案2】:

    在我的情况下,npm 已经升级,我必须降级 npm 版本

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案3】:

    我在运行 laravel 应用程序的 docker 容器中编译资产表单时遇到了同样的问题。

    背景: 我创建了该应用程序以作为 docker 容器运行(按照 laravel 文档上的说明),它使用 laravelsai 来构建容器。 创建并运行容器后,我登录到应用程序容器(即;laravel.test)。

    • 在里面,我跑了npm install来安装节点依赖。
    • npm run dev 虽然 webpack 能够成功编译资产,但它也产生了错误:
        glob error [Error: EACCES: permission denied, scandir '/root/.npm/_logs'] {
          errno: -13,
          code: 'EACCES',
          syscall: 'scandir',
          path: '/root/.npm/_logs'
        }
    

    由于资产已成功编译,我认为这是一个通知错误,没什么大不了的。我还是想看看能不能摆脱它。

    我是如何摆脱它的: 当我进入容器时,我以root 登录。我查看了系统中还有哪些其他用户可用。我运行cat /etc/passwd 并注意到这一行:

    sail:x:1000:1000::/home/sail:/bin/bash

    这意味着sail 是系统上的用户。 因此,在 shell 上,我运行 su sail 以更改为 sail 用户。 然后运行npm run dev 并且该过程成功完成而没有产生该错误。

        root@f0fec81c3439:/var/www/html# su sail
        sail@f0fec81c3439:/var/www/html$ npm run dev
    

    【讨论】:

      猜你喜欢
      • 2018-10-15
      • 2020-11-24
      • 2021-01-04
      • 2017-05-13
      • 1970-01-01
      • 2019-08-22
      • 2017-03-01
      • 2021-04-22
      • 1970-01-01
      相关资源
      最近更新 更多