Node.js 码头工人:入口点可以';无法执行命令,因为它不';我找不到文件

Node.js 码头工人:入口点可以';无法执行命令,因为它不';我找不到文件,node.js,docker,dockerfile,Node.js,Docker,Dockerfile,我正在尝试从节点js图像创建一个容器,我已经配置了Dockerfile,如图所示: 来自节点:b #创建应用程序目录 运行mkdir-p/usr/src/app WORKDIR/usr/src/app #安装应用程序依赖项 复制package.json/usr/src/app 运行npm安装 #捆绑应用程序源 抄袭/usr/src/app 卷。/:/usr/src/app 入口点[“npm跑步观察”] 在package.json中,我有一个名为watch的脚本,它运行名为watch less的

我正在尝试从
节点js
图像创建一个容器,我已经配置了
Dockerfile
,如图所示:

来自节点:b
#创建应用程序目录
运行mkdir-p/usr/src/app
WORKDIR/usr/src/app
#安装应用程序依赖项
复制package.json/usr/src/app
运行npm安装
#捆绑应用程序源
抄袭/usr/src/app
卷。/:/usr/src/app
入口点[“npm跑步观察”]
package.json
中,我有一个名为
watch
的脚本,它运行名为
watch less
的gulp任务

如果我在本地环境中运行
npm run watch
,该命令会工作,但当我尝试运行容器时,它不会工作,并显示下一个错误:

docker:来自守护程序的错误响应:oci运行时错误:container\u linux.go:247:启动容器进程导致“exec:\“npm run watch\”:在$PATH中找不到可执行文件


如果使用
入口点的列表表示法,即使用
[
括号
]
,则必须正确分隔参数

ENTRYPOINT[“npm”、“run”、“watch”]
现在它正试图找到一个名为“
npm run watch
”的文件,但该文件并不存在

ENTRYPOINT [ "npm run watch" ]
这是不正确的json语法,它正在查找可执行文件
npm run watch
,而不是带有参数
run
watch
的可执行文件
npm

使用json语法,您需要分隔每个参数。您可以使用shell语法:

ENTRYPOINT npm run watch
或者您可以更新json语法,如(假设
npm
安装在
/usr/bin
中):

您的卷定义也不正确:

VOLUME ./:/usr/src/app
Dockerfiles无法指定如何将卷装入主机,只能在特定目录位置定义匿名卷。语法如下:

VOLUME /usr/src/app

我强烈反对在中描述的Dockerfile中使用卷定义。简言之,您可以在docker-compose.yml中更好地定义卷,使用docker文件所能做的就是创建匿名卷,如果您希望以后能够轻松重用这些卷,您需要在其他地方重新定义这些卷。

试试#卷。/:/usr/src/appIt有效!谢谢你的帮助和解释:)
VOLUME /usr/src/app