当前位置:嗨网首页>书籍在线阅读

11-优雅地停止容器

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.2.8 优雅地停止容器

Linux世界中,大部分容器都会运行单一进程;在Windows中可能运行若干个,但是下面的原则对于两者都适用。

前面的示例中容器正在运行 /bin/bash 应用。当使用 docker container rm <container> -f 来销毁运行中的容器时,不会发出任何告警。这个过程相当暴力——有点像悄悄接近容器后在脑后突施冷枪。毫无征兆地被销毁,会令容器和应用猝不及防,来不及“处理后事”。

但是, docker container stop 命令就有礼貌多了(就像用枪指着容器的脑袋然后说“你有10s时间说出你的遗言”)。该命令给容器内进程发送将要停止的警告信息,给进程机会来有序处理停止前要做的事情。一旦 docker stop 命令返回后,就可以使用 docker container rm 命令删除容器了。

这背后的原理可以通过Linux/POSIX信号来解释。 docker container stop 命令向容器内的PID 1进程发送了 SIGTERM 这样的信号。就像前文提到的一样,会为进程预留一个清理并优雅停止的机会。如果10s内进程没有终止,那么就会收到 SIGKILL 信号。这是致命一击。但是,进程起码有10s的时间来“解决”自己。

docker container rm <container> -f 命令不会先友好地发送 SIGTERM ,这条命令会直接发出 SIGKILL 。就像刚刚所打的比方一样,该命令悄悄接近并对容器发起致命一击。顺便说明,我可没有暴力倾向!