启动应用程序失败

时间:2016-03-02 07:28:11

标签: node.js docker

我有一个node.js应用程序,它将运行时版本编译到dist文件夹中。因此package.json文件指定起始脚本node dist/index.js

我现在想要容器化它,但容器不需要有分发目录,那些文件确实应该存在于应用程序的根目录中,因此我的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,因此它可以从项目的根目录运行(即它希望通过发出dist/node dist/index.js文件夹中找到所需的资源),但是,当然,这也是一个问题,因为没有分发目录。这通常是如何接近的?

1 个答案:

答案 0 :(得分:2)

我会编写所有相对于当前文件的javascript require调用,而不引用" dist"目录。因此,我们假设您在项目根目录中有index.jsroutes.jsindex.js通过var routes = require('./routes')加载路由。当你编译它们时,将它们两个编译到dist目录中,一切都应该很好。

如果您想通过项目根目录npm start运行,可以配置node dist/index.js

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