使用
在 docker run
命令中通过指定 --restart=xxx
选项来指定容器在退出时的重启策略。
Docker容器的重启动作都是由Docker守护进程完成的。
重启策略
策略 | 说明 |
---|---|
no | 默认值,当容器退出时不会重启 |
on-failure[:max-retries] | 在容器为非正常退出(退出状态为非0)时才会重启,可以指定最大重启次数 |
always | 不管容器退出状态为什么,总是重启容器,当指定该值时,守护进程总是会在进程启动后启动容器 |
unless-stopped | 无论退出状态如何,总是重启容器,除非容器在Docker守护进程停止之前进入了停止状态。 |
每次重启时,docker都会按照 100ms 200ms 400ms 800ms 1600ms … 的规律增加等待延时,直到达到on-failure的最大次数或者docker停止或通过docker rm -f 删除容器。
如果容器重新启动成功(容器启动并运行至少10秒),则延迟将重置为其默认值100 ms。
可以通过docker inspect获得容器(尝试)重新启动的次数。例如,获取容器“my-container”的重启次数
1
docker inspect -f "{{ .RestartCount }}" my-container
docker run
命令中--restart=xxx
和--rm
选项时互斥的,不能同时指定容器只有在成功启动后restart policy才能生效。这里的”成功启动”是指容器处于up至少10秒且已经处于docker监管。这是避免没有成功启动的容器陷入restart的死循环。
如果手动stop一个容器,容器设置的restart policy将会被忽略,除非docker守护进程重启或者容器手动重启;这是避免了如果重启策略设置了always,如果不忽略policy那么容器无法手动停止。
更新重启策略
1 | docker update --restart=no my-container |
当需要彻底删除一个指定always策略的容器时,必须先更新重启策略为no,然后在停止和删除容器。