2017-06-15 66 views
0

我經常遇到一些我們的碼頭容器應用程序的問題,簡單的解決方法是重新啓動碼頭容器。不幸的是,這是一個手動過程,我們已經打破了功能,直到我們發現哪個容器有問題並需要重新啓動。這讓我想知道在某些情況下是否有很好的技術來自動重啓Docker容器?強制有問題的碼頭容器重新啓動?

現在我正在考慮--autorestart標誌的組合,並且在遇到已知問題時強制應用程序關閉。但是,我不確定這是否是最好的方法。

回答

2

,您可以輕鬆擁有的容器重新啓動。兩個重要的事情是--restart標誌,並且該應用程序在檢測到問題時存在。

開始在後臺(-d)的容器,並設置一個restart policy
docker run --restart unless-stopped -d [IMAGE] [COMMAND]

有了重新啓動策略,您可以控制在命令中存在泊塢窗做什麼。使用--restart unless-stopped會告訴Docker始終重新啓動該命令,而不管該命令的退出代碼是什麼。這樣,您可以讓您的應用程序檢查其健康狀況,並在必要時使用exit(1)或類似的關機。當發生這種情況時,Docker將遵循其重新啓動策略並啓動一個新的容器。

儘管Docker並不真正關心返回碼,但我會確保該應用程序存在狀態碼,而不是0以指示問題。如果您想要分析日誌或從腳本使用容器,稍後可能會很有用。

編輯:

我最初的答案用--restart always,但一些考慮後,我認爲這可能是更好的用在這裏--restart unless-stopped。它的行爲更具可預測性,因爲docker stop確實會停止服務。通過--restart alwaysdocker stop將停止容器,但隨後再次啓動一個新容器,這不一定是您想要或預期發生的事情。

1

您可以使用一個命令來重新啓動容器:如果你的應用程序能夠檢測到問題

docker restart $container 
+0

我不確定你的意思。你可以擴大一點嗎?我已經手動使用'docker restart [container id]',這當然有效。我正在尋找選項來迫使它從應用程序中自動發生。 –

+0

對不起,沒有' t讓你的問題正確。 可能您的解決方案沒問題,但是這樣您可以將應用程序行爲與Docker功能結合起來,從架構角度來看,這並不好。 我' d建議去適當監控您的應用程序健康狀態和由3D方適當協調容器。例如,這可能是您自定義的實施或使用Kubernetes。 – webdizz

相關問題