2014-08-27 76 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

相關問題