2014-08-27 35 views
3

我想在Amazon EC2 Ubuntu上运行Docker容器和单独的node.js应用程序,并让它们不断运行。我运行的节点应用程序nohup工作正常,但我想同时运行Docker和节点应用程序,以使它们同时工作或失败。另外,它们应该在故障后自动重新启动。 (当我在屏幕上运行docker时,它会在一段时间后失败。)完成此操作的简单方法是什么?我注意到了诸如Supervisor之类的工具,但我不确定哪种工具专门用于此目的。如何让Docker容器和节点应用程序在EC2上运行?

+0

我还没有看过它,但最新版本的docker有新的重新启动策略功能,请参阅:http://blog.docker.com/2014/08/announcing-docker-1-2-0/ – 2014-08-27 17:07:17

+0

你想要在Docker镜像中运行node.js进程吗? – fabrizioM 2014-08-27 18:14:01

+0

@fabrizioM,没有node.js单独运行,但它与docker实例进行通信。 – 2014-08-27 18:54:21

回答

2

正如我在评论中写道,这将有助于有关于究竟是什么的详细信息你正试图完成,为什么你必须在你的过程之间强制循环依赖。在大多数情况下,最好避免循环依赖。我怀疑你正试图解决的可能是more simple solution to the underlying problem。我建议你重新考虑你的架构,看看你是否不能实现组件的松散耦合。这将大大简化你的操作。尽管如此,管理进程之间的依赖关系仍然是一个足够合理的关注点,所以下面是对您的问题的一般答案。

Upstart是ubuntu通过trusty的默认init守护进程。它很容易配置,并可以在失败时重新启动应用程序。对于未来的版本,debian和ubuntu将切换到systemd。新贵和systemd都提供管理依赖关系的机制。 Upstart的stop on stopped看起来像是你想要的,尽管我自己从未尝试过。 Systemd允许您为a service指定ExecStopFailureActions,其中一个可用于在适当情况下杀死相关服务。 Systemd可能会提供一个我不知道的更合适的控制机制。

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

+0

谢谢我要试试Upstart或systemd。 – 2014-09-03 14:31:16

+0

@ am-rails祝你好运。如果你打算接受我的回答,在赏金结束之前这样做会很体贴。 – 2014-09-05 07:20:32

-1

简单,同时保持所有的要求,我不知道。

尽管如此,我仍然可以做到这一点。

  1. 建立一个Consul集群(没有真的要在开始实际的服务器集群)
  2. 配置服务发现(即领事开始知道哪些服务 监测)
  3. 配置health检查(即领事检查状态,您可以 服务)
  4. 作出这样的调查领事服务状态每X 秒(钩即将推出的自定义脚本,所以投票将在不久的浮图变得不必要 重)
  5. 这个脚本是负责SSH-ING和重新启动这两个应用 (搬运工应用&的Node.js应用)
+0

谢谢,但我不认为我应该需要一个外部服务或应用程序。 – 2014-08-31 02:16:44

相关问题