加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:16:16 所属栏目:安全 来源:网络整理
导读:如果我连接到docker容器 $ docker exec -it my_container zsh 在里面我想杀死我用ctrl c开始的东西我注意到它需要永远完成.我已经用Google搜索了,似乎ctrl c的工作方式与您预期的有点不同.我的问题,如何在容器内修复ctrl c? 问题是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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读