【问题标题】:EACCES: permission denied, open '/usr/local/lib/node_modules/npm/bin/npm-cli.js'EACCES:权限被拒绝,打开'/usr/local/lib/node_modules/npm/bin/npm-cli.js'
【发布时间】:2020-06-22 12:50:02
【问题描述】:

您好先生,我是 docker 新手,我正在使用 ubuntu budgie(linux) 20.04 我的 docker 版本是 Docker version 18.09.9, build 1752eb3 我已经使用 snap 包管理器安装了 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

请告诉我如何解决这个问题。 谢谢。

【问题讨论】:

  • 您似乎在这个问题上附加了两个图像,您将在其中放置错误文本和 Dockerfile。你能删除这些图片并用这些东西的实际文本替换它们吗?
  • 请立即查看
  • 更新到 Docker 版本 19,如 stackoverflow.com/questions/61990562/…

标签: node.js docker


【解决方案1】:

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

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,然后我切换到18.06.3~ce~3-0~ubuntu

我保留了相同的 Dockerfile 配置:

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" ]

它返回:

Step 5/8 : RUN npm install
---> Running in 5b6cd0a9a7cd
npm WARN deprecated chokidar@2.1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated fsevents@1.2.13: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated

> nodemon@1.19.4 postinstall /home/node/app/node_modules/nodemon
> node bin/postinstall || exit 0

Love nodemon? You can now support the project via the open collective:
> https://opencollective.com/nodemon/donate

npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN quiz-service@1.0.0 No description
npm WARN quiz-service@1.0.0 No repository field.

added 322 packages from 227 contributors and audited 323 packages in 21.573s

1 package is looking for funding
run `npm fund` for details

found 0 vulnerabilities

Removing intermediate container 5b6cd0a9a7cd
---> cc344027e126
Step 6/8 : COPY . /app
---> 10841d9cf0bf
Step 7/8 : EXPOSE 8080

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

【讨论】:

  • 非常感谢您的建议。是的,它正在工作。我已经使用了您提供的 docker 安装链接,并且可以正常工作。我的 docker 版本现在是“Docker version 19.03.9, build 9d988398e7”
【解决方案2】:

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

你尝试过最小的 Dockerfile:

FROM node:lts

WORKDIR /home/node
COPY . .
RUN npm install

CMD ['npm', 'start']

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

【讨论】:

  • 都是因为我的 docker 版本太旧了。现在我更新了 docker 版本,现在它正在工作。现在我当前的 docker 版本是“”Docker version 19.03.9, build 9d988398e7“”
【解决方案3】:

请尝试使用 yarn 而不是 node。

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

【讨论】:

    猜你喜欢
    • 2020-06-21
    • 2018-08-01
    • 2021-12-22
    • 2020-10-25
    • 2023-03-25
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 2020-09-05
    相关资源
    最近更新 更多