shell – 如何修复docker容器中的ctrl c

如果我连接到docker容器

$> docker exec -it my_container zsh

在里面我想杀死我用ctrl c开始的东西我注意到它需要永远完成.我已经用Google搜索了,似乎ctrl c的工作方式与您预期的有点不同.我的问题,如何在容器内修复ctrl c?

最佳答案
问题是Ctrl-C向容器内的顶级进程发送信号,但该进程不一定会像您期望的那样做出反应.顶级进程在容器内部具有ID 1,这意味着它不会获得进程通常具有的默认信号处理程序.如果顶级进程是shell,那么它可以通过自己的处理程序接收信号,但不会将其转发到shell中执行的命令.细节解释为here.在这两种情况下,docker容器就好像它只是忽略Ctrl-C一样.

从docker 0.6.5开始,您可以将-t添加到docker run命令,该命令将附加伪TTY.然后,您可以键入Control-C以从容器中分离而不终止它.

如果使用-t和-i,则Control-C将终止容器.当使用-i和-t时,你必须使用Control-P Control-Q分离而不终止.

测试1:

$ID=$(sudo docker run -t -d ubuntu /usr/bin/top -b)
$sudo docker attach $ID
Control-C
$sudo docker ps

容器仍然列出.

测试2:

$ID=$(sudo docker run -t -i -d ubuntu /usr/bin/top -b)
$sudo docker attach $ID
Control-C
$sudo docker ps

容器不在那里(已经终止).如果在第二个示例中键入Control-P Control-Q而不是Control-C,则容器仍将运行.

Wrap the program with a docker-entrypoint.sh bash script that blocks
the container process and is able to catch ctrl-c. This bash example
should help:
07001

相关文章

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Li...
1、什么是docker?答:docker是开源的应用容器引擎;开发人员把他们的应用及依赖包打包发布到容器当中。...
1、什么是namespace? 答:名称空间,作用隔离容器 2、namespace隔离有那些? 答:ipc:共享内存、消息队...
1、Docker能在非Linux平台(Windows+MacOS)上运行吗? 答:可以 2 、如何将一台宿主机的docker环境...
环境要求: IP hostname 192.168.1.1 node1 项目规划: 容器网段:172.16.10.0/24 NGINX:172.16.10.10...
文档上传地址:https://files.cnblogs.com/files/lin-strive/07-docker%E8%B7%A8%E4%B8%BB%E6%9C%BA%E7...