我有一个docker-compose文件,其中将restart
策略设置为always
command
是python3 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尝试重新启动服务的次数越多,两次重新启动之间的等待时间就越长。 在开始时,它每隔一到两秒就会尝试一次,然后尝试四,七,十四,二十六...
如何禁用它?我希望我的服务在每次停止时都尽快重新启动。
答案 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秒的时间。
因此,如果只有一项服务关闭(?)但更接近我想要的服务,会发生什么并不能令人满意。欢迎使用真正的解决方案。