启动应用程序失败

我有一个node.js应用程序编译到dist文件夹的运行时版本。 因此package.json文件指定了启动脚本node dist/index.js

我现在想Containerize它,但容器不需要有分配目录,这些文件真的应该居住在应用程序的根,因此我的Dockerfile包含行

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

将运行时文件放置在图像中。 我遇到的问题是当docker文件发出最后一个命令时:

 CMD ["npm", "start"] 

它失败了,因为index.js现在位于错误的位置(因为它在不存在的分发目录中查找它)。 我可以通过下列方式解决问题:

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

相反,但这似乎是错误的事情。 什么是正确的方法?

*更新I *

我已经修改了index.js所以它可以从项目的根目录运行(即期望通过发布node dist/index.js来find它在dist/文件夹中所需的资源),但是当然这是现在还有一个问题,因为没有分配目录。 这通常如何?

我会代码所有的JavaScript需要调用相对于当前文件没有参考“dist”目录。 假设你在项目根目录下有index.jsroutes.jsindex.js通过var routes = require('./routes')加载路由。 当你编译这些时,把它们两个编译进dist目录,一切都会好的。

如果你想通过npm start从项目根目录运行,你可以configuration那个做node dist/index.js

对于docker来说,没有理由使用npm来启动你的应用程序。 这是一个不必要的过程,没有任何好处。 只需通过WORKDIR /usr/src/app通过dockerfile中的node index.js启动。