如何设置docker容器的自动重启? restart策略有哪些?

发布时间 - 2025-06-30 00:00:00    点击率:

docker容器默认不会自动重启,但可通过设置restart策略实现自愈。常用的策略包括no(默认不重启)、on-failure(出错时重启并可设最大重试次数)、always(无论原因都重启)和unless-stopped(类似always但不受守护进程重启影响)。设置方法有两种:1.运行容器时使用--restart参数,如docker run -d --restart always my-image;2.在docker-compose.yml中配置restart属性。使用时需注意避免因依赖服务未就绪导致的重启死循环,并合理选择策略以适应不同场景。

Docker 容器默认不会在宿主机重启或自身异常退出后自动恢复。但你可以通过设置 restart 策略,让容器具备一定的“自愈”能力。这个功能其实很简单,但用对了能省不少心。


一、什么是 restart 策略?

restart 策略是 Docker 提供的一个选项,用于控制容器在退出时是否自动重启。它不是“永远运行”,而是根据设定的条件来决定要不要重新启动容器。

比如你跑一个 web 服务,如果程序崩溃退出了,默认是不会重启的。但如果你设置了 --restart=always,那不管因为什么原因退出,Docker 都会尝试把它拉起来。


二、常用的 restart 策略有哪些?

Docker 支持以下几种常见的 restart 策略:

  • no:默认值,不自动重启。
  • on-failure[:max-retries]:只有在容器退出状态码非0(出错)时才重启,可以加个最大重试次数。
  • always:只要容器停止,不管是不是正常退出,都会重启。
  • unless-stopped:和 always 类似,但它不会因为 Docker 守护进程重启而自动重启,除非手动停止过。

举个例子:

docker run -d --restart unless-stopped my-web-app

这条命令会让容器一直保持运行状态,即使服务器重启了,也会自动拉起。


三、怎么设置 restart 策略?

设置方式有两种:创建容器时指定,或者在 compose 文件里写好。

1. 使用命令行参数

在运行容器的时候加上 --restart 参数即可:

docker run -d --restart always my-image

2. 在 docker-compose.yml 中配置

如果是用 docker-compose,可以在服务定义里加一行:

services:
  web:
    image: my-web
    restart: unless-stopped

这样管理多个容器的时候更方便,也更容易维护。


四、使用中要注意什么?

虽然 restart 很实用,但也不是随便乱设。

  • 如果你的容器依赖外部服务(比如数据库),频繁重启可能会导致死循环,卡在不断重启的状态。

  • on-failure 可以加重试次数限制,避免无限重启。例如:

    docker run -d --restart on-failure:5 my-image

    表示最多尝试重启 5 次,失败就放弃。

  • 如果你不希望容器随着系统重启自动拉起,那就别用 alwaysunless-stopped


基本上就这些。设置容器的自动重启不算复杂,但在生产环境使用时要结合实际情况考虑清楚策略的选择。


# docker  # ai  # 自动重启  # 为什么  # 命令行参数  # 循环  # 数据库  # 重启  # 重试  # 有两种  # 拉起  # 里加  # 如果你  # 也会  # 出了  # 多个 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Android自定义控件实现温度旋转按钮效果  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  如何在云主机快速搭建网站站点?  如何用IIS7快速搭建并优化网站站点?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何确保FTP站点访问权限与数据传输安全?  javascript如何操作浏览器历史记录_怎样实现无刷新导航  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  网站制作价目表怎么做,珍爱网婚介费用多少?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  如何在云服务器上快速搭建个人网站?  三星、SK海力士获美批准:可向中国出口芯片制造设备  如何用PHP工具快速搭建高效网站?  微信小程序 input输入框控件详解及实例(多种示例)  Firefox Developer Edition开发者版本入口  如何快速搭建FTP站点实现文件共享?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  zabbix利用python脚本发送报警邮件的方法  Laravel如何处理表单验证?(Requests代码示例)  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  非常酷的网站设计制作软件,酷培ai教育官方网站?  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  JavaScript如何实现音频处理_Web Audio API如何工作?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  Android Socket接口实现即时通讯实例代码  Laravel怎么为数据库表字段添加索引以优化查询  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  如何生成腾讯云建站专用兑换码?  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  如何在服务器上三步完成建站并提升流量?  Laravel安装步骤详细教程_Laravel环境搭建指南  Java解压缩zip - 解压缩多个文件或文件夹实例  Python3.6正式版新特性预览  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  如何批量查询域名的建站时间记录?  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  Laravel如何使用Sanctum进行API认证?(SPA实战)  Laravel如何使用模型观察者?(Observer代码示例)