如何为Node.js docker应用程序生成package-lock.json文件?

如何为Node.js docker应用程序生成package-lock.json文件?,node.js,docker,Node.js,Docker,Node.js docker教程()指定在启动docker生成package-lock.json文件之前,应在主机上运行npm安装 当npm/节点在主机上不可用时,应如何生成此文件 在package.json中添加新的依赖项时,package-lock.json应该如何更新 npm指定应该将package-lock.json文件签入到源代码管理中。当npm安装通过docker运行时,它会在容器中生成package-lock.json文件,而不是从源代码管理中检出它的位置。显而易见的解决方法是在文

Node.js docker教程()指定在启动docker生成package-lock.json文件之前,应在主机上运行npm安装

当npm/节点在主机上不可用时,应如何生成此文件

在package.json中添加新的依赖项时,package-lock.json应该如何更新


npm指定应该将package-lock.json文件签入到源代码管理中。当npm安装通过docker运行时,它会在容器中生成package-lock.json文件,而不是从源代码管理中检出它的位置。显而易见的解决方法是在文件更新时将其从容器复制到主机,但这似乎应该有一个更简单的解决方案。

我通常只创建一个临时容器来运行内部的npm,而不必在主机上安装节点和npm。大概是这样的:

docker run --rm -v "$(pwd)":/data -w /data -it node bash
然后在bash内部运行
npminit
生成package.json,并运行
npm install
生成package-lock.json。您可能希望使用
-u“$UID”
使文件也归您的主机用户所有,或者在之后将其删除


我也会做同样的事情来安装新的软件包,只是
npm install package
在临时容器上的bash内部。

npm install将在容器中运行,作为docker构建的一部分。容器中运行的npm安装的可能副本会在容器中生成文件-将文件复制到主机以将其签入源代码管理是标准做法吗?将锁定文件签入源代码管理绝对是标准做法(在我使用过的每个包管理器中,每种语言都有这个概念。)您还可以尝试使用
docker run--rm-v“$(pwd)”:/data-w/data-it”节点:alpine'sh
来使用轻量级alpine而不是基于debian的容器。@srchulo它设置了当前目录(容器内)对于您正在执行的命令running@Paul谢谢!我想可能就是这样,但我删除了它,并且我在同一个目录中。可能是因为我在Dockerfile中设置了相同的WORKDIR。