2016-11-13 51 views
1

的Dockerfile跑這裏來箱的圖像image/name,然後運行創建容器,但docker ps報告服務退出。預計它將繼續運行,以便爲網站提供服務,但不會這樣做。它如何被修復?集裝箱退出,而不是在後臺

//Dockerfile 
FROM lambdalinux/baseimage-amzn:2016.09-000 
RUN curl --silent --location https://rpm.nodesource.com/setup_4.x | bash - 
RUN yum install -y tar nodejs 
COPY ./bundle /opt/bundle/ 
WORKDIR /opt/bundle/programs/server/ 
RUN npm install 
CMD node ./main.js 

和命令行docker run -tid -p 80:80 image/name

+1

如果你運行'節點。/ main.js'自己,它停留在前臺或者它無論是退出還是在後臺運行? – larsks

+0

在我看來你的服務在集裝箱內出口,因此也是集裝箱。你看過容器的日誌嗎? '''docker logs ''' –

+0

@larsks在服務器提示符下,'node./main.js'報告命令未找到,'docker logs'報告沒有錯誤。這告訴我節點沒有安裝... hummm –

回答

0

上看起來是微不足道的錯誤。

預計main.js/目錄下爲每Dockerfile即最後一行,
CMD node ./main.js

但是,我相信,main.js/opt/bundle/programs/server/目錄下。

現在您可以選擇運行main應用程序。

1不修改圖像:

只要改變docker run並告訴要調用

docker run -tid -p 80:80 image/name node /opt/bundle/programs/server/main.js 

2,其應用而無需修改圖像:從主機安裝本地目錄到容器:

相同如第一種情況。讓我們假設應用程序在側面圖像中不可用並在主機/本地機器中可用。因此,將本地目錄安裝到容器並運行該應用程序。在這種情況下,當前目錄中有一個應用程序app2.js

docker run -p 80:80 -v $(pwd):/share -itd image/name node /share/app2.js 

3修改圖像,請參閱絕對路徑中CMD

刪除現有的圖像。修改Dockerfile

CMD node ./main.js 

改變下面的語句要

CMD node /opt/bundle/programs/server/main.js 

現在重建圖像。在這種情況下,您不必在運行容器時在命令中提及要運行的應用程序。與上面不同的是,如果您看到選項#1,#2,則還指定了在運行容器時要調用哪個應用程序。相反,可以簡單地運行圖像,因爲圖像知道默認運行哪個應用程序。

docker run -tid -p 80:80 image/name 

Exited當docker容器完成/完成內部運行的進程時顯示狀態。

main.js不能定位在正確的位置,處理立即結束,你的情況容器退出。

希望這是有幫助的。