Docker容器重启策略on-failure与always区别
时间:2026-11-15 07:16 作者:emer 分类: Docker
前言
容器崩溃后要不要自动拉起,靠 --restart 重启策略。always 和 on-failure 行为不同,选错会导致异常退出也无限重启,或正常退出后反复拉起。本文讲解四种策略、区别、设置和查看。
操作步骤
1. 四种策略
- no:不重启(默认)
- on-failure:仅非零退出码时重启
- always:无论退出码都自动重启
- unless-stopped:自动重启,但手动停止后不再起
2. 启动时指定 always
docker run -d --restart=always nginx
3. on-failure 并限制重试次数
docker run -d --restart=on-failure:5 nginx
4. 给已有容器改策略
docker update --restart=always 容器名
5. 查看当前策略
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' 容器名
常见坑
- always 在容器正常退出后也会被拉起,不适合一次性任务。
- on-failure 不限次数,崩溃循环会反复重启。
- unless-stopped 与 always 的差别在于手动 stop 后是否尊重。
- 一次性迁移脚本用 always 会无限重启,应选 no。
- 宿主机重启后 always/unless-stopped 自动拉起,no 不会。
- 重启次数过多要看日志找根因,不能只靠策略。
- Compose 里用 restart: always 字段配置。
总结
always 无条件自动重启适合常驻服务,on-failure 仅失败重启并可限次数,unless-stopped 尊重手动停止,no 用于一次性任务。常驻服务选 always,批处理任务选 no,改策略用 docker update。
遇到问题加QQ23979811 协助处理