2017-03-29 50 views
1

我试图从node js图像创建一个容器文件入口点不能执行的命令,我已经配置了我的Dockerfile如图所示:泊坞窗:因为它没有找到

FROM node:boron 

# Create app directory 
RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 

# Install app dependencies 
COPY package.json /usr/src/app 
RUN npm install 

# Bundle app source 
COPY . /usr/src/app 

VOLUME ./:/usr/src/app 
ENTRYPOINT [ "npm run watch" ] 

package.json我有一个名为watch的脚本,它运行名为watch-less的吞噬任务。

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

docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"npm run watch\": executable file not found in $PATH".

+0

尝试#VOLUME ./:/usr/src/app – itiic

回答

3
ENTRYPOINT [ "npm run watch" ] 

这是一个不正确的JSON的语法,它在寻找可执行npm run watch,而不是可执行npm与参数runwatch

不同,需要每个参数分开JSON语法。您可以使用shell语法:

ENTRYPOINT npm run watch 

或者你可以更新JSON语法像(假设npm安装在/usr/bin):

ENTRYPOINT [ "/usr/bin/npm", "run", "watch" ] 

您也有一个不正确的卷定义:

VOLUME ./:/usr/src/app 

Dockerfiles无法指定卷挂载到主机的方式,只是在特定的目录位置定义了匿名卷。有了语法,如:

VOLUME /usr/src/app 

我有强烈的意见,反对使用内部的Dockerfile在this blog post描述的体积定义。简而言之,您可以在docker-compose.yml中更好地定义卷,如果您希望稍后能够轻松地重用它们,您可以使用Dockerfile来创建匿名卷,这些卷在其他位置仍需重新定义。

+0

它的工作原理!感谢您的帮助和您的解释:) – abaracedo

4

如果使用列表表示为ENTRYPOINT,即,与[括号],您必须正确分隔参数。

ENTRYPOINT ["npm", "run", "watch"] 

现在它正试图找到一个字面名为“npm run watch”文件不存在。