“如何修复错误”;npm错误!无法从路径或包中检测节点名称;使用docker和nodeJS构建简单应用程序时?

“如何修复错误”;npm错误!无法从路径或包中检测节点名称;使用docker和nodeJS构建简单应用程序时?,docker,docker-build,Docker,Docker Build,Dockerfile FROM node:alpine COPY ./ ./ RUN npm install CMD ["npm", "start"] index.js const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hi there'); }); app.listen(8080, () =>

Dockerfile

FROM node:alpine
COPY ./ ./
RUN npm install
CMD ["npm", "start"]
index.js

const express = require('express');
const app = express();
app.get('/', (req, res) => {
  res.send('Hi there');
});
app.listen(8080, () => {
  console.log("Listening on post 8080");
});
package.json

{
  "dependencies": {
    "express": "*"
  },
  "scripts": {
    "start": "node index.js"
  }
}
docker build

npm ERR! could not detect node name from path or package

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2020-11-23T23_36_35_301Z-debug.log
The command '/bin/sh -c npm install' returned a non-zero code: 1
我无法理解为什么这不起作用。

设置一个文件夹,然后将文件复制到该目录:

FROM node:alpine

WORKDIR /app
COPY ./ /app

RUN npm install
CMD ["npm", "start"]
如文件中所述:

WORKDIR
指令为Dockerfile中的任何
运行
CMD
入口点
复制
添加
指令设置工作目录。如果
WORKDIR
不存在,即使在任何后续Dockerfile指令中未使用,也会创建它

在npm的Github repo上,一个类似的错误被提到是上一个问题的一部分。它似乎只与新版本的
node
npm
(截至bug报告的node v15.x、npm v7.0.x)相关:

新安装的节点15.1.0和
npm i-gnpm@7.0.9
,由于某些(可能无关)原因无法正常工作。

但在您的例子中,确实有一个package.json,因此可能是因为
build
命令在没有设置正确的
WORKDIR
的情况下无法找到它。因此,与其使用
npm
,不如确保始终设置
WORKDIR
。无论怎样,建议使用以下内容:

为了清晰和可靠,您应该始终为
WORKDIR
使用绝对路径。此外,您应该使用
WORKDIR
而不是像
RUN cd…&&do something
这样的大量指令,这些指令很难阅读、排除故障和维护

24 verbose stack TypeError: could not detect node name from path or package
...
28 verbose node v15.1.0
29 verbose npm  v7.0.8
30 error could not detect node name from path or package