Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使Docker容器和节点应用程序在EC2上运行?_Node.js_Amazon Ec2_Daemon_Docker - Fatal编程技术网

Node.js 如何使Docker容器和节点应用程序在EC2上运行?

Node.js 如何使Docker容器和节点应用程序在EC2上运行?,node.js,amazon-ec2,daemon,docker,Node.js,Amazon Ec2,Daemon,Docker,我想在AmazonEC2Ubuntu上运行一个docker容器和一个单独的node.js应用程序,并让它们持续运行。我让node应用程序与nohup一起运行,运行得很好,但是我想同时运行docker和node应用程序,这样它们要么工作,要么失败。此外,它们应该在发生故障后自动重新启动。(当我在屏幕上运行docker时,它在一段时间后失败了。)实现这一点的简单方法是什么?我注意到了这样的工具,但我不确定是什么工具专门用于此目的 简单的同时保留您的所有要求,我不知道 不过,为了实现健壮性和可扩展性,

我想在AmazonEC2Ubuntu上运行一个docker容器和一个单独的node.js应用程序,并让它们持续运行。我让node应用程序与nohup一起运行,运行得很好,但是我想同时运行docker和node应用程序,这样它们要么工作,要么失败。此外,它们应该在发生故障后自动重新启动。(当我在屏幕上运行docker时,它在一段时间后失败了。)实现这一点的简单方法是什么?我注意到了这样的工具,但我不确定是什么工具专门用于此目的

简单的同时保留您的所有要求,我不知道

不过,为了实现健壮性和可扩展性,我会这样做

  • 设置群集(在开始时不一定是实际的服务器群集)
  • 配置服务发现(即领事了解哪些服务 (监控)
  • 配置检查(即领事检查您的 (服务)
  • 制作一个自定义脚本,每X个月轮询一次领事的服务状态 秒(钩子很快就要来了,所以轮询将变得不必要 在不久的将来)
  • 此脚本负责对这两个应用程序进行ssh初始化和重新启动 (docker应用程序和node.js应用程序)

  • 正如我在评论中所写的,这将有助于获得更多关于您正试图实现什么以及为什么必须在流程之间强制执行循环依赖性的信息。在大多数情况下,最好避免循环依赖关系。我想你可能想解决一个问题。我建议您重新考虑您的体系结构,看看您是否能够实现更松散的组件耦合。这将大大简化您的操作。尽管如此,管理流程之间的依赖关系是一个足够合理的问题,所以这里是对您的问题的一般性回答

    是ubuntu上通过trusty的默认初始化守护程序。它易于配置,并且可以在应用程序出现故障时重新启动应用程序。对于未来的版本,debian和ubuntu都将切换到。upstart和systemd都提供了管理依赖关系的机制。Upstart's看起来像是做了你想做的事情,尽管我自己从来没有尝试过。Systemd允许您为指定
    ExecStop
    FailureActions
    ,其中一个可用于在适当情况下终止相关服务。Systemd可能会提供一种我不知道的更合适的控制机制

    管理依赖关系的另一种方法是让supervisord在容器内同时管理node.js和其他进程。Supervisor不是启动和停止容器的好工具,但它非常适合管理容器内的流程。通过一点编码,您可以创建一个自定义进程,该自定义进程也将在容器内运行,并在您的任一进程终止时指示主管退出。这种方法的优点是,您可以在容器中可移植地封装依赖项。然后,您可以使用upstart或systemd启动容器,您所要做的就是确保容器在退出时重新启动

    更新:
    ,但在这种情况下,最好的方法可能是在单独的docker容器中运行node应用程序,并使用ECS或Kubernetes将它们一起部署。

    我还没有研究过,但最新版本的docker具有新的重启策略功能,请参阅:您想在docker映像中运行node.js进程,对吗?@fabrizioM,没有node.js单独运行,但它与docker实例通信。请提供更多信息?具体来说,为什么docker容器重新启动时node.js应用程序必须重新启动?为什么不把node.js也放在一个容器中?@AryehLeibTaurog理想情况下docker和node都不应该失败,但如果docker失败,node也应该失败,所以很明显它们都坏了。我尝试将它们都放在屏幕上,但它们仍然会分别失败。谢谢,但我认为我不需要外部服务或应用程序。谢谢,我将尝试Upstart或systemd。@祝rails好运。如果你打算接受我的回答,在悬赏结束前接受我的回答会是一件体贴的事。