Docker STOPSIGNAL做什么?

Soc*_*tes 9 docker dockerfile

我试图了解STOPSIGNALdockerfile中命令的确切作用。因此,根据Docker Docs

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

通过这种解释,我了解到有一些信号发送到docker容器,以告知内部应用程序停止。但是,当我使用来关闭正在运行的容器时sudo docker stop container-name,它是否还自动停止了其中运行的所有内容?我可以键入此命令而不会出现任何错误。然后STOPSIGNAL在dockerfile中显式定义不是多余的吗?

查看如何使用dockerfile构建Nginx,使用了命令STOPSIGNAL SIGTERM。但是,那个寓意是什么意思呢?它会破坏一些无法定义的东西STOPSIGNAL吗?

sp0*_*0gg 10

SIGTERM是发送到容器以停止它们的默认信号:https : //docs.docker.com/engine/reference/commandline/stop/

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

话虽如此,目前尚不清楚为什么作者明确定义了STOPSIGNALas SIGTERM

查看此提交,我们可以看到STOPSIGNAL曾经被设置为SIGQUIT

我的猜测是,进行更改后,出于文档考虑,他们将其明确保留。

在此处讨论更改:https : //github.com/nginxinc/docker-nginx/issues/167


d4n*_*yll 7

运行时docker stop,您正在指示Docker守护进程向运行容器的进程发送信号以使其停止。

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

但是,您的应用程序可能被配置为侦听不同的信号- SIGUSR1SIGUSR2

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

  • 为了完成这个答案,“短时间”默认是指10秒。如果这不合适,可以使用 docker stop 命令将“宽限期”设置为参数。 (3认同)