EACCES:权限被拒绝,打开'/usr/local/lib/node_modules/npm/bin/npm-cli.js'

时间:2020-05-23 04:37:42

标签: node.js docker

您好,先生,我是Docker的新手,我正在使用ubuntu budgie(linux)20.04,我的docker版本是 Docker version 18.09.9, build 1752eb3 我已经使用快照包管理器安装了docker,路径是这样的 /snap/bin/docker.machine /snap/bin/docker.compose /snap/bin/docker /snap/bin/docker.help 我通过此链接在主机中安装了nodejs和npm nodejs install link 我正在通过与docker制作单个nodejs express应用程序来学习docker。这是我的Dockerfile

FROM node:lts
USER node
ENV NPM_CONFIG_PREFIX=/home/node/.npm-global
ENV PATH=$PATH:/home/node/.npm-global/bin
WORKDIR /home/node
COPY package.json .
RUN npm install
COPY . .
CMD ['npm', 'start']

这是我的app.js文件

const express = require('express');
const app = express()

app.get('/', (req, res) => {
  res.send('hello world')
})

app.listen(3000, () => {
  console.log('app is renning at 3000');
})

当我开始从此dockerfile构建映像时,出现此错误

internal/fs/utils.js:230
    throw err;
    ^

Error: EACCES: permission denied, open '/usr/local/lib/node_modules/npm/bin/npm-cli.js'
    at Object.openSync (fs.js:458:3)
    at Object.readFileSync (fs.js:360:35)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1152:22)
    at Module.load (internal/modules/cjs/loader.js:977:32)
    at Function.Module._load (internal/modules/cjs/loader.js:877:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47 {
  errno: -13,
  syscall: 'open',
  code: 'EACCES',
  path: '/usr/local/lib/node_modules/npm/bin/npm-cli.js'
}
The command '/bin/sh -c npm install --only=prod' returned a non-zero code: 1

请告诉我该如何解决。 谢谢。

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我尝试了几种解决方案,但是唯一的工作方式是更改docker版本

.getAttribute

我正在使用docker-ce|5:18.09.0~3-0~ubuntu-bionic|https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages docker-ce|18.06.3~ce~3-0~ubuntu|https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages docker-ce|18.06.2~ce~3-0~ubuntu|https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages ,而我切换到5:19.03.9~3-0~ubuntu-bionic

我保留了相同的Dockerfile配置:

18.06.3~ce~3-0~ubuntu

它返回:

FROM node:10 
USER root 
WORKDIR /home/node/app 
COPY package.json . 
RUN npm install 

# Bundle app source COPY . /app

EXPOSE 8080  CMD [ "node", "server.js" ]

您可以检查此链接以获取更多详细信息on reinstalling docker

答案 1 :(得分:0)

此错误源于以下事实:您当前的用户没有足够的权限来访问npm cli文件。

您尝试了最小的Dockerfile:

FROM node:lts

WORKDIR /home/node
COPY . .
RUN npm install

CMD ['npm', 'start']

它对您有用吗?如果是这样,我假设您的用户node是您的Dockerfile中的问题,或者您还有我们在OP中看不到的其他脚本。

答案 2 :(得分:0)

请尝试使用yarn而不是node。

FROM node:10 
USER root 
WORKDIR /home/node/app 
COPY package.json . 
RUN yarn install