“如何修复错误”;npm错误!无法从路径或包中检测节点名称;使用docker和nodeJS构建简单应用程序时?
Dockerfile“如何修复错误”;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, () =>
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