Docker STOPSIGNAL做什么?

Docker STOPSIGNAL做什么?,docker,dockerfile,Docker,Dockerfile,我试图理解dockerfile中的STOPSIGNAL命令的确切功能。因此,根据报告: STOPSIGNAL指令设置将被调用的系统调用信号 发送到容器以退出。此信号可以是有效的无符号信号 与内核syscall表中的位置匹配的数字,例如 例如,实例9或格式为SIGNAME的信号名称 西格尔 通过这个解释,我了解到有一些信号被发送到docker容器,告诉内部应用程序停止。但是当我用sudocker stop container name关闭一个正在运行的容器时,它不也会自动停止里面运行的所有东西吗?

我试图理解dockerfile中的
STOPSIGNAL
命令的确切功能。因此,根据报告:

STOPSIGNAL指令设置将被调用的系统调用信号 发送到容器以退出。此信号可以是有效的无符号信号 与内核syscall表中的位置匹配的数字,例如 例如,实例9或格式为SIGNAME的信号名称 西格尔

通过这个解释,我了解到有一些信号被发送到docker容器,告诉内部应用程序停止。但是当我用
sudocker stop container name
关闭一个正在运行的容器时,它不也会自动停止里面运行的所有东西吗?我可以键入此命令而不会出现任何错误。在dockerfile中显式定义
STOPSIGNAL
难道不是多余的吗


查看如何使用命令
STOPSIGNAL SIGTERM
。但这究竟意味着什么?如果不定义
STOPSIGNAL
,是否会破坏某些功能?

SIGTERM
是发送到容器以停止它们的默认信号:

STOPSIGNAL
允许您覆盖发送到容器的默认信号。将其保留在Dockerfile之外不会造成任何伤害-它将保持默认的
SIGTERM

尽管如此,仍不清楚作者为何将
STOPSIGNAL
明确定义为
SIGTERM

看看这个,我们可以看到
STOPSIGNAL
过去被设置为
SIGQUIT

我的猜测是,在进行更改之后,为了文档的缘故,他们明确地保留了它

此处讨论更改:

运行时,指示Docker守护进程向运行容器的进程发送停止信号

默认情况下,它会发送一个
SIGTERM
,然后等待一小段时间,以便进程可以正常退出。如果进程没有在宽限期内终止(默认为10秒,可自定义),它将发送一个
SIGKILL

但是,您的应用程序可能被配置为监听不同的信号,例如,
SIGUSR1
SIGUSR2


在这些情况下,您可以使用
STOPSIGNAL
Dockerfile指令覆盖默认值。

要完成此回答,“短时间”默认为10秒。如果不合适,可以使用docker stop命令将“宽限期”设置为参数。@VincentPazeller谢谢,您所说的是正确的。请随意编辑我的答案!