首页/云/Docker 容器速查/docker run --restart 重启策略
基础命令50 条

docker run --restart 重启策略

为容器配置退出后的自动拉起规则:on-failure/always/unless-stopped 三种常用策略,配合 docker update 可在线调整。

Docker 容器速查云更新于 2026-10-13

重启策略是什么

重启策略定义容器退出后要不要被自动拉起、最多拉起几次。它是容器在无人值守环境里长期运行的基础能力:宿主机重启、进程崩溃、依赖短暂不可用都可能让容器停止,策略决定这些情况下服务能否自己恢复。

基本信息

设置位置创建容器时指定,也可对已有容器在线调整
取值不重启、失败时重启并可限定次数、总是重启、手动停止后不重启
默认值不自动重启,退出即停止
生效时机容器退出之后触发,进程运行中不会重复拉起
外部依赖只负责拉起容器,不负责健康判断与流量摘挂

典型使用场景

  • 无人值守服务:宿主机夜间重启后业务自动恢复,不必等人工介入
  • 依赖启动顺序:依赖服务稍晚就绪时,应用重启几次后能自行连上
  • 临时故障自愈:进程偶发崩溃时自动恢复,减少被叫醒的概率
  • 批处理容器:按失败状态重启,成功退出后保持停止状态
  • 维护窗口:手动停掉的服务在宿主机重启后不应被拉起,避免干扰维护操作

常用示例

常用示例
docker run -d --restart unless-stopped --name web nginx:1.27-alpine  # 常驻服务推荐写法
docker run -d --restart on-failure:5 --name job app/batch:1.0        # 失败时最多重启五次
docker run -d --restart no --name oneshot app/task:1.0               # 跑完就结束
docker update --restart on-failure:3 web                            # 在线调整已有容器
docker inspect -f '{{.HostConfig.RestartPolicy.Name}} {{.RestartCount}}' web  # 核对策略与次数

策略取值对照

取值行为适用场景
不重启退出后保持停止一次性任务、需要人工确认的场景
失败时重启非正常退出才拉起,可限定次数批处理任务与可容忍失败的服务
总是重启无论退出码如何都拉起,手动停止后宿主机重启仍会拉起必须常驻的服务,但要接受手动停不干净
手动停止后不重启自动拉起,但手动停掉后不再随宿主机启动生产常驻服务的推荐选择
已禁用等价于不重启需要临时停稳但不想改配置的场景

崩溃循环怎么处理

  • 先看日志尾部,确认是配置错误、依赖连不上还是程序自身缺陷
  • 再看重启次数,次数快速增长说明已经陷入循环,此时频繁拉起只是重复失败
  • 临时把策略改成不重启,让容器停在原地便于检查现场
  • 修好之后重新启动,并在观察窗口内确认状态稳定
  • 彻底解决后恢复原策略,避免把临时处置留在生产

与其他机制的分工

  • 编排平台的调度策略处理跨主机重建,容器级策略处理单机自愈
  • 健康检查判断服务是否还能工作,与重启策略互补
  • 监控告警负责通知人,不能依赖它替代自动恢复
  • 负载均衡负责摘流,重启期间要把异常实例从流量里移走
  • 配置管理保证重启后的容器与预期一致,否则重启只会把错误状态重复一遍
把重启策略与自动删除同时使用会直接报错。需要保留现场或需要自动清理时,二选其一,不要既想清理又要自动拉起。
重启发生在容器退出之后,并且有退避机制,不会高频反复。看到状态不断变化说明容器一直在退出,要先找根因而不是加大重启次数。

易错点

  • 依赖自动重启掩盖了根因,服务反复崩溃但一直「看起来在跑」,问题被拖到更难处理的时候
  • 默认策略下宿主机重启后容器不会恢复,维护结束后出现长时间的静默不可用
  • 同时使用自动删除与重启策略,命令直接报错,部署脚本中断
  • 批处理任务设了总是重启,成功退出后又被拉起,重复执行造成数据重复

数据来源与参考

  • Docker 官方 CLI 参考:docker run --restart(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌