Docker原生支持Restart策略,是最簡單、最直接的自動重啟方式,適用于大多數場景。策略類型包括:
no(默認):容器退出后不自動重啟;on-failure:容器以非0狀態碼退出時自動重啟(可指定最大重啟次數,如on-failure:5表示最多重啟5次);always:無論退出狀態碼如何,容器退出后總是自動重啟;unless-stopped:容器總是自動重啟,除非被手動停止。使用docker run命令時,通過--restart參數指定策略,例如:
docker run -d --restart always --name my_container my_image
上述命令會啟動一個名為my_container的容器,即使容器因故障退出,也會自動重啟。
若容器已在運行,可使用docker update命令動態調整重啟策略,例如:
docker update --restart always my_container
此命令會將my_container的策略改為“總是自動重啟”。
使用docker inspect命令查看容器的當前重啟策略,例如:
docker inspect --format='{{.HostConfig.RestartPolicy}}' my_container
輸出結果會顯示容器的RestartPolicy類型(如always)。
若使用Docker Compose管理容器,可在docker-compose.yml文件中為服務指定重啟策略,例如:
version: '3'
services:
my_service:
image: my_image
restart: always # 或 on-failure、unless-stopped
保存文件后,運行docker-compose up -d啟動服務,容器會根據策略自動重啟。
若需更復雜的自動重啟邏輯(如定時檢查),可創建自定義腳本并通過systemd設置為系統服務:
/path/to/restart.sh),內容為重啟容器的命令:#!/bin/bash
docker restart my_container
賦予腳本執行權限:chmod +x /path/to/restart.sh。/path/to/daemon.sh),定時調用重啟腳本:#!/bin/bash
while true; do
/path/to/restart.sh
sleep 3600 # 每隔1小時執行一次
done
systemd服務文件(如/etc/systemd/system/docker-autorestart.service),內容如下:[Unit]
Description=Docker Auto Restart Service
[Service]
ExecStart=/path/to/daemon.sh
[Install]
WantedBy=default.target
sudo mv docker-autorestart.service /etc/systemd/system/
sudo systemctl enable docker-autorestart.service
sudo systemctl start docker-autorestart.service
此方案適用于需要額外控制(如日志記錄、條件判斷)的場景,但配置復雜度較高。systemd服務正常運行,避免守護進程崩潰導致自動重啟失效;sudo systemctl enable docker設置,確保主機重啟后Docker服務自動啟動。