作者:锋丽恋歌521 | 来源:互联网 | 2022-12-13 14:45
我试图了解STOPSIGNAL
dockerfile中命令的确切作用。因此,根据Docker Docs:
STOPSIGNAL指令设置将被发送到容器退出的系统调用信号。该信号可以是与内核syscall表中的位置匹配的有效无符号数字(例如9),也可以是格式为SIGNAME的信号名称(例如SIGKILL)。
通过这种解释,我了解到有一些信号发送到docker容器,以告知内部应用程序停止。但是,当我使用来关闭正在运行的容器时sudo docker stop container-name
,它是否还自动停止了其中运行的所有内容?我可以键入此命令而不会出现任何错误。然后STOPSIGNAL
在dockerfile中显式定义不是多余的吗?
查看如何使用dockerfile构建Nginx,使用了命令STOPSIGNAL SIGTERM
。但是,那个寓意是什么意思呢?它会破坏一些无法定义的东西STOPSIGNAL
吗?
1> sp0gg..:
SIGTERM
是发送到容器以停止它们的默认信号:https : //docs.docker.com/engine/reference/commandline/stop/
STOPSIGNAL
确实允许您覆盖发送到容器的默认信号。将其保留在Dockerfile中不会造成任何危害-它将保持默认值SIGTERM
。
话虽如此,目前尚不清楚为什么作者明确定义了STOPSIGNAL
as SIGTERM
。
查看此提交,我们可以看到STOPSIGNAL
曾经被设置为SIGQUIT
。
我的猜测是,进行更改后,出于文档考虑,他们将其明确保留。
在此处讨论更改:https : //github.com/nginxinc/docker-nginx/issues/167
2> d4nyll..:
运行时docker stop
,您正在指示Docker守护进程向运行容器的进程发送信号以使其停止。
默认情况下,它通过发送a SIGTERM
然后等待一小段时间来执行此操作,以便进程可以正常退出。如果该进程没有在宽限期内终止(默认情况下为10秒,可自定义),它将发送SIGKILL
。
但是,您的应用程序可能被配置为侦听不同的信号- SIGUSR1
和SIGUSR2
。
在这些情况下,您可以使用STOPSIGNAL
Dockerfile指令覆盖默认值。