Docker Swarm默认restart 'any'策略含义咨询:官方文档未明确
Docker Swarm
any 重启策略的实际行为 我来给你拆解一下这个官方文档没明确说明的重启策略——其实从实际运维经验和对Swarm源码的梳理来看,它的运行逻辑非常直白:
只要容器处于停止状态,无论退出原因是什么,Swarm都会触发重启
不管容器是正常退出(比如退出码为0)、进程异常崩溃(非0退出码),还是因为所在节点故障被调度到其他节点,只要容器不再处于运行状态,Swarm调度器就会立刻尝试重启它。和单容器
always策略的区别?
很多人会把Swarm的any和单容器docker run的always搞混,两者行为上确实很贴近,但any是专门适配Swarm集群调度逻辑的:如果容器所在节点宕机,Swarm会先把容器调度到其他可用节点,再执行重启,而不是只在原死节点上做无效尝试。典型适用场景
适合那些必须持续在线的核心服务,比如数据库、消息队列、反向代理——不管是程序崩溃、手动误停还是节点故障,都要确保服务能快速恢复可用。
举个实际使用的命令示例:
docker service create --restart-condition any --name core-redis redis:latest
这个命令创建的Redis服务,不管是进程意外崩溃、你手动停掉容器,还是运行它的节点挂了,Swarm都会自动重启(或调度到其他节点后重启)这个容器。
对比一下Swarm的另外两个重启策略:on-failure只有当容器非0退出码时才重启,none则完全不触发自动重启,any是最“激进”的保活策略。
内容的提问来源于stack exchange,提问作者user1387219
相关产品推荐
相关产品推荐

