2016-03-02 144 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

相关问题