当脚本陷阱EXIT时,bash – docker在SIGINT上挂起
发布时间:2020-12-15 20:55:13 所属栏目:安全 来源:网络整理
导读:当我在docker容器中运行脚本,并且脚本陷阱EXIT,并且我发送了Ctrl C时,docker无法停止容器. Dockerfile FROM alpineRUN apk add --no-cache bashCOPY script.sh /CMD ./script.sh script.sh #!/bin/bashfunc() { echo "exit script"}trap func EXITecho "scri
当我在docker容器中运行脚本,并且脚本陷阱EXIT,并且我发送了Ctrl C时,docker无法停止容器.
Dockerfile FROM alpine RUN apk add --no-cache bash COPY script.sh / CMD ./script.sh script.sh #!/bin/bash func() { echo "exit script" } trap func EXIT echo "script" sleep 30 跑步 $docker build -t traps . $docker run -it traps 看到“脚本”回显后,按Ctrl C. 预期:打印“退出脚本”,容器退出,将控制权返回给我的终端,就像没有EXIT陷阱一样. 实际:打印“退出脚本”,但容器仍在运行并保持在我的终端上. 更复杂的是,如果我添加一个SIGINT陷阱,事情就像我期望的那样完成.在按下Ctrl C时,首先触发SIGINT陷阱,然后触发EXIT陷阱,然后退出容器. 这是怎么回事?是否有任何方法可以在不添加虚拟SIGINT陷阱的情况下使其工作? (首先使用-t的原因是启用Ctrl C.) 解决方法
我运行你的文件并确定bash在按下Ctrl-C后进入100%CPU状态.附加gdb或strace表示它是无限的SIGSEGVing.
如果是这种情况,您可以通过将shebang更改为: #!/bin/bash -i 或者,CMD命令: CMD /bin/bash -i ./script.sh 也许请查看此信息以获取更多信息:https://github.com/moby/moby/issues/4854 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |