当前位置: 首页 > 面试题库 >

我终止Docker容器时如何执行脚本

牧宁
2023-03-14
问题内容

我想在控制台上键入:

docker ^a docker container^ stop

在终止之前执行脚本。那可能吗?


问题答案:

docker stop命令首先尝试通过向容器中的根进程(PID
1)发送SIGTERM信号来停止正在运行的容器。如果该进程在超时时间内仍未退出,则将发送SIGKILL信号。

实际上,这意味着您必须定义一个ENTRYPOINT脚本,该脚本将拦截(捕获)SIGTERM信号并执行适当的任何关闭逻辑。

样本入口点脚本可能如下所示:

#!/bin/bash

#Define cleanup procedure
cleanup() {
    echo "Container stopped, performing cleanup..."
}

#Trap SIGTERM
trap 'cleanup' SIGTERM

#Execute a command
"${@}" &

#Wait
wait $!

(关于 wait的
shell信号处理在这里进行了更多详细说明)

请注意,使用上面的入口点,仅当容器显式停止时才执行清除逻辑,如果您希望它在基础进程/命令自身停止(或失败)时也运行,则可以按以下方式对其进行重组。

...

#Trap SIGTERM
trap 'true' SIGTERM

#Execute command
"${@}" &

#Wait
wait $!

#Cleanup
cleanup


 类似资料:
  • 按“Reload this page”可以运行其余的代码,甚至提交表单,就像按F8“Continue”一样。 更新: 当脚本暂停时按F5(刷新)时: null null 有点进步! 调试时导航到同一页: Chrome V31:与刷新相同。 IE 11:脚本被终止,新的浏览器会话开始(与关闭和再次打开相同)。 Firefox V26:什么都没有发生。 Chrome开发工具终于添加了一个适当的方法来停

  • 本文向大家介绍docker容器如何优雅的终止详解,包括了docker容器如何优雅的终止详解的使用技巧和注意事项,需要的朋友参考一下 前言 在Docker大行其道的今天,我们能够非常方便的使用容器打包我们的应用程序,并且将它在我们的服务器上部署并运行起来。但是,谈论到如何停掉运行中的docker容器并正确的终止其中的程序,这就成为一个非常值得讨论的话题了。 事实上,在我们日常的项目当中,这是我们经常

  • 我目前正在运行一个docker-comment堆栈,用于与量角器测试运行器、一个服务于网页的nodejs服务器和一个服务于java后端的野飞服务器进行基本集成测试。 堆栈是从我的构建服务器(con课程ci)中的dind(docker中的docker)容器运行的。 但是看起来容器并没有在完成量角器测试后终止。 因此,由于wildfly和NodeJ的容器仍在运行,构建任务从未完成。。。 当测试结束时,

  • 我写了一个程序在IDLE令牌化文本文件,它开始令牌349文本文件!我怎样才能阻止它?如何停止正在运行的Python程序?

  • 问题内容: 我用IDLE编写了一个程序来标记文本文件,然后开始标记349个文本文件!我该如何阻止它?如何停止正在运行的Python程序? 问题答案: 要停止程序,只需按 + 。

  • 问题内容: 我的目录仅包含两个文件,并且: 在读 并且仅包含 在成功生成: 但是,如果尝试这样做,则会出现错误: 是什么原因造成的?(我记得以类似的方式在基于图像的脚本中运行脚本,所以也许它是Alpine特有的)? 问题答案: Alpine附带ash作为默认外壳,而不是。 所以你可以 有一个shebang将/ bin / bash定义为sayhello.sh的第一行,因此您的文件sayhello.