2016-03-02 149 views
0

我有一個node.js應用程序,它將運行時版本編譯到dist文件夾中。因此package.json文件指定了啓動腳本node dist/index.js啓動應用程序失敗

我現在想containerize,但容器不需要有分佈目錄,這些文件確實應該活在應用程序的根,所以我Dockerfile包含線

COPY package.json /usr/src/app/ 
COPY dist/* /usr/src/app/ 

哪些地方圖像中的運行時文件。我的問題是,當搬運工文件發出了最後的命令:

CMD ["npm", "start"] 

失敗,因爲index.js現在是在錯誤的位置(因爲它是在不存在分佈目錄尋找它)。我可以通過發佈來解決問題:

CMD ["node", "index.js"] 

取而代之的是,但這似乎是錯誤的事情。什麼是正確的方法?

*更新I *

我已經修改了index.js因此它可能(即它希望找到它在dist/文件夾需要的資源),通過發出node dist/index.js從項目的根目錄中運行,但當然,現在這也是一個問題,因爲沒有分配目錄。這通常如何接近?

回答

2

我會代碼所有的JavaScript需要調用相對於當前文件沒有參考「dist」目錄。假設您在項目根目錄中有index.jsroutes.jsindex.js通過var routes = require('./routes')加載路線。當你編譯這些時,將它們兩個編譯到dist目錄中,一切都會好的。

如果您想通過npm start從項目根目錄運行,您可以將其配置爲node dist/index.js

對於docker,根本沒有理由使用npm來啓動您的應用程序。這是一個沒有益處的不必要的過程。只需在dockerfile中通過node index.js啓動WORKDIR /usr/src/app即可。

+1

是的,沒有理由使用'npm start'。另外,看看'.dockerignore' [1]文件,它可以幫助你僅僅複製你需要的文件。 [1] https://docs.docker.com/engine/reference/builder/#dockerignore-file –

+0

謝謝你們倆(+1)。那美妙的作品 – ekkis

+0

@PavolPitonak,實際上有。我發現'package.json'的config部分的環境變量不會被加載,除非我通過npm start – ekkis

相關問題