微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

docker不响应CTRL + C在terminal

目前与Docker有问题; 我正在使用它来运行启动时启动ipython笔记本的映像。 我正在寻找ipython笔记本本身的一些编辑,所以我需要在启动后closures它。

但是,在terminal中按CTRL + C只需input“^ C”作为string。 似乎没有真正的方式使用CTRL + C来实际closuresipython笔记本实例。

有没有人有任何线索可以导致这一点,或知道任何解决scheme呢?

在CentOS上进行文件操作时出现操作系统错误13号?

列出打开的端口,closures端口和打开在centos下的端口

安装了一个python2.7作为替代,但是认2.6的path被破坏了。 认解释器的系统path文件

gcc和glibc版本

我怎样才能使Apache包含文件夹中的所有文件

怎么能从linux的命令行执行nagios命令

如何在CentOS 6.5中安装docker 1.9+?

错误:命令'gcc'在CentOS上以退出状态1失败

CentOS 6解压缩文件,但文件将转到根文件

shell_exec()在“ls”上返回null

这篇文章提出CTRL-Z作为一个解决方法,将进程发送到后台,然后通过进程ID来终止进程: 不能使用Ctrl-C来杀死Python脚本

可能的问题:

该程序捕获的CTRL – C和什么都不做,非常不可能。

后台进程不正确管理。 只有主进程接收到信号并且子进程挂起。 很可能发生了什么事情。

建议的解决方案:

检查程序文档是如何正确启动和停止的。 ctrl-c似乎不是正确的方法

使用docker-entrypoint.sh bash脚本封装程序,该脚本阻止容器进程并能够捕获ctrl-c。 这个bash示例应该有所帮助: https : //rimuhosting.com/kNowledgebase/linux/misc/trapping-ctrl-c-in-bash

在捕捉ctrl-c之后,为ipython笔记本调用正确的关闭方法

问题在于Ctrl-C向容器中的顶级进程发送一个信号,但是这个进程并不像你所期望的那样反应。 顶层进程在容器中有ID 1,这意味着它不会得到进程通常具有的认信号处理程序。 如果顶层进程是一个shell,那么它可以通过自己的处理程序接收信号,但不会将其转发到在shell中执行的命令。 细节在这里解释。 在这两种情况下,Docker容器都会像忽略Ctrl-C一样。

如果您正在构建自己的映像,解决方案是运行一个最小化的init进程,如tini或dumb-init ,作为容器中的顶级进程。

@march的回答已经很好地解释了为什么这可能会发生。

关于停止不响应的容器,另一个解决方案是在另一个终端中简单地发出一个docker stop <container-id> 。 与CTRL-C相反, docker stop不发送SIGINT,而是发送一个SIGTERM信号,这个过程可能会有不同的反应。

用法:码头停止[选项]集装箱[集装箱…]

在宽限期之后,通过发送SIGTERM和SIGKILL来停止正在运行的容器

如果失败,请使用docker kill <container-id>立即发送一个SIGKILL。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐