docker stop 和 docker kill -s term 有什么区别

docker stop 和 docker kill -s term 有什么区别

根据文档:

  • 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

相关内容