docker重启策略

使用

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,然后在停止和删除容器。