(轉)Docker容器的重啟策略及docker run的--restart選項詳解
1. Docker容器的重啟策略
Docker容器的重啟策略是面向生產環境的一個啟動策略,在開發過程中可以忽略該策略。
Docker容器的重啟都是由Docker守護程序完成的,因此與守護程序息息相關。
Docker容器的重啟策略如下:
-
no,預設策略,在容器退出時不重啟容器
-
on-failure,在容器非正常退出時(退出狀態非0),才會重啟容器
-
on-failure:3,在容器非正常退出時重啟容器,最多重啟3次
-
always,在容器退出時總是重啟容器
-
unless-stopped,在容器退出時總是重啟容器,但是不考慮在Docker守護程序啟動時就已經停止了的容器
例如:
docker run -p 8092:80 --name apicloud -v /home/lifehaier:/var/www/html -d --restart=on-failure:3 hub.docker.terminus.io:5000/aabb:20180315
解釋:使用docker run命令執行一個容器,該容器內部監聽80埠,與宿主機系統8092埠對映,命名該容器名稱為apicloud,宿主機系統目錄/home/lifehaier與容器內部/var/www/html路徑對映,如果容器對應的images路徑/var/www/html下面有資料的話,則被宿主機/home/lifehaier路徑下面的資料覆蓋,-d引數是讓容器後臺執行,--restart=on-failure:3是指容器在未來出現異常退出(退出碼非0)的情況下迴圈重啟3次;hub.docker.terminus.io:5000/aabb:20180315 是images名稱,容器基於此images進行啟動。
2. Docker容器的退出狀態碼
docker run的退出狀態碼如下:
-
0,表示正常退出
-
非0,表示異常退出(退出狀態碼採用chroot標準)
-
125,Docker守護程序本身的錯誤
-
126,容器啟動後,要執行的預設命令無法呼叫
-
127,容器啟動後,要執行的預設命令不存在
-
其他命令狀態碼,容器啟動後正常執行命令,退出命令時該命令的返回狀態碼作為容器的退出狀態碼
3. docker run的--restart選項
通過--restart選項,可以設定容器的重啟策略,以決定在容器退出時Docker守護程序是否重啟剛剛退出的容器。
--restart選項通常只用於detached模式的容器。
--restart選項不能與--rm選項同時使用。顯然,--restart選項適用於detached模式的容器,而--rm選項適用於foreground模式的容器。
在docker ps檢視容器時,對於使用了--restart選項的容器,其可能的狀態只有Up或Restarting兩種狀態。
4. 示例與補充
示例:
docker run -d --restart=always bba-208 docker run -d --restart=on-failure:10 bba-208
補充:
#檢視容器重啟次數
docker inspect -f "{{ .RestartCount }}" bba-208
#檢視容器最後一次的啟動時間
docker inspect -f "{{ .State.StartedAt }}" bba-208
參考連結:
https://docs.docker.com/engine/reference/run/