如何设置Docker容器重启策略?_第1张图片

开始之前

宿主机可能会因某些原因(如宕机)重新启动,默认情况下docker容器是停止状态的,这可能会对某些应用场景带来不便,所以docker提供了--restart参数,在创建容器时设置此参数,docker守护进程将重新启动容器。

举个栗子

  • 创建容器
docker run -d --name test \
    --restart=unless-stopped \
    -p 8080:8080 \
    tomcat:alpine
  • 列出容器
docker ps --format '{{.ID}} {{.Status}} {{.Names}}'
a88aa63d67a9 Up 1 minutes test

注意: 这里ps子命令使用格式化输出,特别是status列表示容器的状态,更多信息请查看参考2

  • 模拟宕机
# 关闭VM电源,并重新开机。
  • 验证容器是否启动
docker ps --format '{{.ID}} {{.Status}} {{.Names}}'
a88aa63d67a9 Up 51 seconds test

命令帮助

docker run --help | grep "restart"
 --restart=no   Restart policy to apply when a container exits

restart 参数选项

no
默认选项,不会重新启动容器。

on-failure[:max-retries]
容器处于非零退出状态时重新启动容器,使用可选项则会限制重新启动尝试次数。

unless-stopped
无论容器退出状态如何始终重新启动容器,但如果容器之前已处于停止状态,则在守护程序启动时不会启动它。

always
无论容器退出状态如何,Docker守护进程无限期地尝试重新启动容器。

小结

最后来总结下文章中的知识点

  • 没有显示指定restart参数创建的容器,docker将会使用默认值No,也就是不会重新启动容器。
  • 对于某些关键应用场景,建议首选 unless-stopped 或者 on-failure选项,好处是不会无限制地重启容器。
  • always选项建议作为次选,因为当容器内部应用错误而停止(非零退出状态),docker仍然不断地尝试重新启动容器。

参考文章

doker&k8s Qun [703906133]