根据文档:
docker stop <containerName>
SIGTERM
将向容器内的主进程发送docker kill -s <signal> <containerName>
将向容器内的主进程发送任意信号。
这对我来说意味着docker stop
等同于docker kill -s term
。
但事实并非如此。当我使用 时docker kill -s term
,我的应用程序会收到 SIGTERM 并正常退出。但当我使用 时docker stop
,我的应用程序不会收到任何信号,并且在 10 秒超时后,Docker 将强制终止该进程。
什么可以解释这种不同的行为?
答案1
事实证明,文档在这方面是不完整的。docker stop
并不总是会发送SIGTERM
。如果在图像元数据中配置了不同的“停止信号”,它将改为发送该信号。
就我而言,我所构建的父镜像在其 Dockerfile 中包含以下行:
STOPSIGNAL SIGQUIT
因此,每当您调用停止时,Docker 都会发送一个SIGQUIT
而不是一个。SIGTERM