选unless-stopped,因它兼顾自愈能力与人工可控性:宿主机重启或容器崩溃时自动恢复,但尊重docker stop等手动干预,适合nginx、postgresql等长期运行服务。
选 always 还是 unless-stopped,关键看是否要尊重人工干预。
always:无条件恢复运行
容器只要 Docker 守护进程启动,就一定会被拉起——不管它之前是因为崩溃退出、被 docker stop 停掉,还是系统重启前已停止。这种策略适合真正不能中断的服务,比如核心网关或监控采集器。
- 系统重启后自动启动
- 容器崩溃后立即重启
-
docker stop后,下次 Docker 服务重启时仍会自动启动 - 若需彻底停用,必须先执行
docker update --restart=no 容器名或删掉容器
unless-stopped:允许主动暂停
这是生产环境更常用的选择。它同样保证宿主机重启或 Docker 守护进程恢复后自动启动,但会记住你手动执行的 docker stop 操作,之后不再自动拉起。
- 系统重启后自动启动(前提是没被手动停过)
- 容器崩溃后自动重启
- 执行
docker stop后,状态被标记为“已停止”,后续 Docker 重启也不会触发启动 - 适合需要临时维护、调试或灰度下线的服务,比如 Web API 或后台任务
怎么决定用哪个?
问自己两个问题:
- 这个服务是否允许运维人员通过
docker stop短暂关停而不被干扰?→ 是,选 unless-stopped - 这个服务是否绝对不允许任何中断,哪怕管理员误操作停了也必须强制恢复?→ 是,才考虑 always
绝大多数长期运行的服务,比如 Nginx、PostgreSQL、Redis,推荐 unless-stopped。它兼顾自愈能力与人工可控性。











