2016-03-03 79 views
0

我試着通過以下語法排列啓動泊塢窗內的服務器:如何逃生CMD在Dockerfile

  1. CMD [ "forever", "start", "server/server.js" ]
  2. CMD [ "forever", "start", "server\/server.js" ]
  3. CMD forever start server/server.js

但是其中的每失敗了。

前兩個作爲"forever start server"跑......注意失蹤的/server.js一塊。

最後一個跑了作爲"/bin/sh -c 'forever "

那麼,什麼是正確的語法放置forever start server/server.js一個Dockerfile內運行它作爲分離的容器?

+2

創建一個腳本,複製到你的容器,設置爲你的'CMD'? – Sobrique

+0

足夠公平,upvoted作爲解決方法,仍然期待聽到一個語法解決方案,雖然:) – pulkitsinghal

+0

'sh -c'你的命令? – user2915097

回答

0

只需通過sh -c運行它作爲意見提出, 的語法是:

CMD["/bin/sh", "-c", "'forever start server/server.js'"] 

如果你的工具需要登錄shell中運行,也許嘗試這一個了:

CMD["/bin/bash", "-lc", "'forever start server/server.js'"] 

這應該可以正常工作,與將命令放入標準sh shell中的效果相同。

+0

沒有用,但我會深入挖掘爲什麼並回復。 – pulkitsinghal

+0

更新第二個選擇,也許它只是一個登錄shell的東西? –

+1

因此,一位有用的導師透露,除非命令在前臺運行,否則容器會立即停止。所以我添加了一個前臺'tail'命令:'永遠啓動server/server.js && tail -f $(forever list | grep'server/server.js'| awk'{print $ 8}');' – pulkitsinghal

0

我剛剛遇到同樣的問題,在運行Docker容器時啓動Java應用程序。

從泊塢窗參考你有三次機會:

CMD ["executable","param1","param2"] 
CMD ["param1","param2"] 
CMD command param1 param2 

看一看這裏:Docker CMD

我不熟悉JavaScript,但假設你要啓動的應用程序是Java應用:

CMD ["/some path/jre64/bin/java", "server.jar", "start", "forever", ...] 

而且隨着你的意見,別人說什麼,你也可以通過碼頭工人ADD或添加腳本在您的Dockerfile並從碼頭RUN開始。

還有另一種解決方案是運行碼頭容器,並通過docker run .. -v HOSTDIR:CONTAINERDIR在目標腳本中加載所需腳本,並使用docker exec觸發該腳本。

有一個在這裏讀到:Docker Filemounting + Docker Exec

+0

謝謝!我在原始Q中列出的非功能性排列依據Docker CMD的文檔。一旦我確定沒有人知道適當的語法,我將開始評估變通方法。 – pulkitsinghal