在运行docker run
命令启动容器时,可以通过--restart
指定容器退出时的重启策略。
当重启策略在一个容器上生效时,通过docker ps
观察,该容器的状态不是Up就是Restarting。也可以通过docker event
检查容器具体的重启策略。
Docker(18.07)目前支持以下几种重启策略:
策略 | 描述 |
---|---|
no | 不自动重启(默认模式) |
on-failure[:max-retries] | 重启因出错停止的容器(非0退出码)。可以通过指定max-retries来限定docker daemon的最大尝试重启次数 |
always | docker daemon会无限尝试重启退出的容器(无论以什么退出码退出)。手动停止容器后,容器策略不再生效。除非重启docker daemon |
unless-stopped | 与always 类似,区别在于手动停止容器后,就算重启docker daemon,容器策略也不再生效。 |
使用重启策略时注意以几点:
- 重启策略只有在容器启动成功之后才会生效。这里的启动成功指的是容器至少运行了10秒,docker deamon已经开始监控它了。这防止了一个根本无法启动成功的容器陷入重启死循环。
- 手动停止容器后,重启策略会在docker deamon重启或容器被手动重启后生效,同样为了防止陷入重启死循环。
- 这里的重启策略是容器级别的,swarm service的重启策略请参考flags related to service restart.
参考:
https://docs.docker.com/engine/reference/run/#restart-policies---restart
https://docs.docker.com/config/containers/start-containers-automatically/
https://blog.codeship.com/ensuring-containers-are-always-running-with-dockers-restart-policy/