gpt4 book ai didi

linux - bash 脚本命令 "trap"在 docker 容器中不起作用

转载 作者:太空狗 更新时间:2023-10-29 12:25:58 28 4
gpt4 key购买 nike

我正在尝试正常关闭在 docker 容器中运行的服务(在运行 raspbian lite 的 raspberry pi 3 b 上),因为仅发出“docker stop”会中断服务(不会清除锁定文件)

我的互联网研究表明,当脚本接收到终止信号时,使用 bash 命令“trap”的人会执行命令。

我试过以下方法:

docker run --rm -it --name trap resin/rpi-raspbian:jessie /bin/bash -c " trap 'echo shutting down ; exit' INT; echo waiting; read"

当我运行上面的命令时,“正在等待”被打印到屏幕上,当我按下 CTRL+C 时,会出现消息“正在关闭”。 - 正是我想要的!

唯一的问题是,我似乎无法从 docker 容器外部将信号发送到 bash 脚本。我试过(在并行 ssh session 中):

docker kill --signal="INT" trap
docker kill --signal="SIGINT" trap

此外,我尝试使用“docker stop”发送的默认信号,但这导致控制台等待约 10 秒(默认 docker 停止超时),然后终止 docker 容器。

docker stop trap

这两种方法都没有将消息“正在关闭”打印到屏幕上。

如果有任何帮助,我将不胜感激。

编辑 1:它也不适用于 SIGTERM(当我执行以下任一命令然后发出“docker stop”时,我仍然没有收到“正在关闭”消息)。

docker run --rm -it --name trap resin/rpi-raspbian:jessie /bin/bash -c " trap 'echo shutting down ; exit' TERM; echo waiting; read"
docker run --rm -it --name trap resin/rpi-raspbian:jessie /bin/bash -c " trap 'echo shutting down ; exit' SIGTERM; echo waiting; read"

解决方法:图像似乎是问题所在。入口点“/usr/bin/entry.sh”捕获信号。我用另一张图片试过了,效果很好:

$ docker run -it --name trap digitallyseamless/archlinux-armv6h /bin/bash -c " trap 'echo shutting down ; exit 0' SIGTERM; echo waiting; read"

使用(从另一个终端)停止容器

$ docker stop trap

然后查看容器输出

$ docker logs trap
waiting
shutting down

因为我没有特别需要使用特定图像(它真的只是让我达到目标的一种手段),所以我将换掉图像。

附言:非常感谢@tkausl

最佳答案

正如我在评论中提到的,docker stop 发送了一个 SIGTERM。根据您的编辑,这对您不起作用,但是,我只是使用完全相同的命令进行了尝试(尽管将图像更改为 ubuntu )并且它有效。您可能正在脱离运行箱吗?在这种情况下,您显然看不到该消息,删除 --rm 标志并查看 docker 日志

我是怎么做到的:

在一个终端中:

docker run --rm -it --name trap ubuntu /bin/bash -c " trap 'echo shutting down ; exit' SIGTERM; echo waiting; read"

在第二个终端中:

$ docker stop f6
f6

停止后我在第一个终端看到的:

$ docker run --rm -it --name trap ubuntu /bin/bash -c " trap 'echo shutting down ; exit' SIGTERM; echo waiting; read"
waiting
shutting down
$

关于linux - bash 脚本命令 "trap"在 docker 容器中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40332365/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com