启动应用程序失败
我有一个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.js
和routes.js
。 index.js
通过var routes = require('./routes')
加载路由。 当你编译这些时,把它们两个编译进dist
目录,一切都会好的。
如果你想通过npm start
从项目根目录运行,你可以configuration那个做node dist/index.js
。
对于docker来说,没有理由使用npm来启动你的应用程序。 这是一个不必要的过程,没有任何好处。 只需通过WORKDIR /usr/src/app
通过dockerfile中的node index.js
启动。
- docker-compose不下载requirements.txt文件的附加内容
- 在使用docker exec时,评估容器内的bashexpression式,而不是主机
- 使用“docker-compose build”创build的图像启动Docker容器
- 用Docker开发ASP.NET Core的习惯用法是什么?
- Docker-compose失败,运行一个从文件读取configuration的jar文件
- 当不分离时,Docker容器的http响应速度较慢
- 如何用Docker OS X重新激活Python中的TensorFlow
- Bash脚本来设置Docker失败,但个别命令的工作
- 通过wercker.yml公开应用程序的端口