docker 本身有提供重啟政策(restart policy)讓你可以控制容器是否要自動重啟。

使用方式

在 docker run 加上 --restart flag

1
$ docker run -d --restart unless-stopped nginx

在 docker-compose.yml,設定 restart: xxx

1
2
3
4
services:
  nginx:
    image: nginx:latest
    restart: always

支援四種政策

  • no
  • on-failure[:max-retries]
  • always
  • unless-stopped

no

  • 容器不會自動重啟
  • 預設的重啟政策

on-failure

  • 在容器異常停止運作時會重啟容器
  • 容器是否異常停止會看 exit code 是什麼,非 0 就是異常
  • 可以額外限制嘗試重啟的次數

always

  • 如果容器停止運作,會一直重啟
  • 如果手動停止容器,只會在 docker 常駐程式(daemon) 重啟後重啟

unless-stopped

  • always 相似
  • 差別是 docker 常駐程式重啟後不會重啟容器

後記

懶人做法就是需要容器常註時,就是 restart: always

Reference