Docker容器自啟動的實現(xiàn)方法
容器自啟動
Docker提供了restart policy機(jī)制,可以在容器退出或者Docker重啟時控制容器能夠自啟動。這種Restart policy可以保證相關(guān)容器按照正確順序啟動。雖然也可以通過進(jìn)程監(jiān)控的方式(如systemd)來完成這種動作,但Docker還是建議盡量避免使用進(jìn)程監(jiān)控的方式來 "自啟動" 容器。
Docker的 Restart policy與dockerd命令的--live-restore啟動標(biāo)志還有區(qū)別:--live-restore標(biāo)志可以在Docker升級的時候保證容器繼續(xù)運行,但是網(wǎng)絡(luò)以及用戶終端輸入會被中斷。
那到底什么是restart policy呢?我們來看看實際的情況吧。
使用restart policy
restart policy在使用docker run啟動容器時通過--restart標(biāo)志指定,這個標(biāo)志有多個value可選,不同的value有不同的行為,如下表所列:
Flag | Description |
no | 不自動重啟容器. (默認(rèn)value) |
on-failure | 容器發(fā)生error而退出(容器退出狀態(tài)不為0)重啟容器 |
unless-stopped | 在容器已經(jīng)stop掉或Docker stoped/restarted的時候才重啟容器 |
always | 在容器已經(jīng)stop掉或Docker stoped/restarted的時候才重啟容器 |
舉個例子:下面的命令啟動一個Redis容器,當(dāng)Redis容器停止后或者Docker被重啟時,Redis容器都會重啟。
$ docker run -dit --restart unless-stopped redis
Restart policy細(xì)節(jié)
使用restart policies時需要注意如下細(xì)節(jié):
(1) 容器只有在成功啟動后restart policy才能生效。這里的"成功啟動"是指容器處于up至少10秒且已經(jīng)處于docker監(jiān)管。這是避免沒有成功啟動的容器陷入restart的死循環(huán)。
(2)如果手動(manually)的stop(與前面的explicitly stopped有何區(qū)別)一個容器,容器設(shè)置的restart policy將會被忽略,除非Docker daemon重啟或者容器手動重啟。這是避免了另外一種死循環(huán)。
(3)restart policies只能用于容器,對于swarm services其restart policies有不通過的配置。
進(jìn)程監(jiān)控
如果上面講的restart policies無法滿足需求,也可以采用進(jìn)程監(jiān)控的管理方案,如upstart,systemd或者supervisor等等。
這種方案中,進(jìn)程監(jiān)控服務(wù)運行在容器中。它可以監(jiān)控一個進(jìn)程是否運行,并可以在此進(jìn)程沒有運行的時候去啟動該進(jìn)程。而這發(fā)生的一切Docker都毫無知覺。
Docker不推薦此種方法來進(jìn)行進(jìn)程監(jiān)控,理由很簡單,這種方法和系統(tǒng)平臺甚至linux發(fā)行版相關(guān)。
原文:https://docs.docker.com/engine/admin/start-containers-automatically/#use-a-process-manager
Docker容器開機(jī)自動啟動
在使用docker run啟動容器時,使用--restart參數(shù)來設(shè)置:
# docker run -m 512m --memory-swap 1G -it -p 58080:8080 --restart=alway --name bvrfis --volumes-from logdata mytomcat:4.0 /root/run.sh
--restart具體參數(shù)值詳細(xì)信息:
- no - 容器退出時,不重啟容器;
- on-failure - 只有在非0狀態(tài)退出時才從新啟動容器;
- always - 無論退出狀態(tài)是如何,都重啟容器;
還可以在使用on - failure策略時,指定Docker將嘗試重新啟動容器的最大次數(shù)。默認(rèn)情況下,Docker將嘗試永遠(yuǎn)重新啟動容器。
# sudo docker run --restart=on-failure:10 redis
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
docker搭建php+nginx+swoole+mysql+redis環(huán)境的方法
這篇文章主要介紹了docker搭建php+nginx+swoole+mysql+redis環(huán)境的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03docker自建rustdesk-server遠(yuǎn)程桌面的解決方案
RustDesk 是一款可以平替 TeamViewer 的開源軟件,旨在提供安全便捷的自建方案,這篇文章主要介紹了docker自建rustdesk-server遠(yuǎn)程桌面的解決方案,需要的朋友可以參考下2024-07-07Docker鏡像與容器的導(dǎo)入導(dǎo)出以及常用命令總結(jié)
Docker是一個開源的容器引擎,基于go語言開發(fā)并遵循了apache2.0協(xié)議開源,下面這篇文章主要給大家介紹了關(guān)于Docker鏡像與容器的導(dǎo)入導(dǎo)出以及常用命令總結(jié)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08在Docker中部署Confluence和jira-software的方法步驟
這篇文章主要介紹了在Docker中部署Confluence和jira-software的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06