如果我连接到docker容器
$> docker exec -it my_container zsh
在里面我想杀死我用ctrl c开始的东西我注意到它需要永远完成.我已经用Google搜索了,似乎ctrl c的工作方式与您预期的有点不同.我的问题,如何在容器内修复ctrl c?
问题是Ctrl-C向容器内的顶级进程发送信号,但该进程不一定会像您期望的那样做出反应.顶级进程在容器内部具有ID 1,这意味着它不会获得进程通常具有的默认信号处理程序.如果顶级进程是shell,那么它可以通过自己的处理程序接收信号,但不会将其转发到shell中执行的命令.细节解释为
here.在这两种情况下,docker容器就好像它只是忽略Ctrl-C一样.
原文链接:https://www.f2er.com/bash/384980.html从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