docker-compose重新启动政策-禁用两次重新启动之间的指数延迟

时间:2019-01-08 19:24:23

标签: docker docker-compose

我有一个docker-compose文件,其中将restart策略设置为always

commandpython3 script.py

script.py 仅显示当前时间戳:

import time

print(time.time())

使用docker-compose up我得到了:

random_service    | 1546974860.1233172
random_service    | 1546974861.9269428
random_service    | 1546974863.616101
random_service    | 1546974865.4225447
random_service    | 1546974867.2077854
random_service    | 1546974869.4796813
random_service    | 1546974873.4290836
random_service    | 1546974880.5541086
random_service    | 1546974894.0697372
random_service    | 1546974920.4050376

如您所见,似乎docker尝试重新启动服务的次数越多,两次重新启动之间的等待时间就越长。 在开始时,它每隔一到两秒就会尝试一次,然后尝试四,七,十四,二十六...

如何禁用它?我希望我的服务在每次停止时都尽快重新启动。

2 个答案:

答案 0 :(得分:4)

您可以选择在docker-compose级别上自定义重启策略-https://docs.docker.com/engine/reference/commandline/service_create/

  

-restart-condition满足条件(“ none” |“ on-failure” |“ any”)(默认为“ any”)时重新启动

     

-restart-delay两次尝试之间的延迟(ns | us | ms | s | m | h)(默认为5s)

     

-restart-max-attempts放弃之前的最大重新启动次数

     

-restart-window窗口,用于评估重启策略(ns | us | ms | s | m | h)

https://docs.docker.com/engine/reference/run/#restart-policies---restart中记录了提及的重启行为:

  

在每次重新启动之前添加一个不断增加的延迟(从100毫秒开始,是以前的延迟的两倍),以防止服务器泛滥。这意味着守护程序将等待100毫秒,然后等待200毫秒,400、800、1600等,直到达到失败限制,或者当您停止docker或docker rm -f容器时。

     

如果容器成功重新启动(容器已启动并运行至少10秒钟),则延迟将重置为其默认值100毫秒。

您仍然可以选择在容器或主机OS中使用其他适合您需要的进程管理器(新贵,systemd,supervisor,monit等)。一些建议:https://docs.docker.com/config/containers/start-containers-automatically/#use-a-process-manager

答案 1 :(得分:0)

我刚刚想出了一个技巧,即删除重启策略,然后像这样用docker-compose运行watch

watch -n 0 docker-compose up

现在,每次运行之间大约有2.5秒的时间。

因此,如果只有一项服务关闭(?)但更接近我想要的服务,会发生什么并不能令人满意。欢迎使用真正的解决方案。