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

前端之家收集整理的这篇文章主要介绍了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相关文章