我在集群模式下以集群模式运行Docker。 根据此处https://docs.docker.com/engine/reference/commandline/service_update/和此处https://docs.docker.com/engine/reference/commandline/service_create/编写的文档,--stop-grace-period命令可设置强制终止容器之前的等待时间。
预期的行为- 我的期望是,Docker将在滚动更新期间等待这段时间,直到尝试停止正在运行的容器为止。
实际行为- 几秒钟后,Docker将发送终止信号,并启动带有新版本映像的新容器。
重现该行为的步骤
知道为什么吗?
我还在Github上发布了一个问题,网址为:https://github.com/docker/for-linux/issues/615
答案 0 :(得分:0)
我认为您可以在GitHub上解决此问题。
stop-grace-period这是停止(SIGTERM)和杀死(SIGKILL)之间的时间段。
当然,您可以使用--stop-signal
开关将SIGTERM更改为另一个信号。收到停止信号后,应用到容器中的行为是您的责任。
Here很好的文章,解释了这个厨房。
答案 1 :(得分:0)
--stop-grace-period
值是Docker在发送sigterm后放弃等待优雅退出容器的等待时间。宽限期完成后,它将使用sigkill杀死容器。
事件的顺序似乎是根据您对设置的描述而设计的。您的容器在收到其sigterm时会干净而快速地退出,因此Docker无需发送sigkill。
我看到您还指定了--update-delay 60
,但由于您只有一个副本,因此该设置无效。更新延迟将通知docker在循环执行第一个任务后等待60秒,因此它仅对2个或更多副本有用。
您似乎希望您的单副本服务同时运行一个新任务和一个旧任务60秒,但是新模式启动后,群集模式很高兴用sigterm摆脱旧容器。< / p>