2017-03-29 48 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」文件不存在。