首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash script命令"trap“在码头容器中不工作

bash script命令"trap“在码头容器中不工作
EN

Stack Overflow用户
提问于 2016-10-30 18:45:00
回答 2查看 3.2K关注 0票数 3

我正试图优雅地关闭我在码头容器中运行的服务(在运行raspbian的raspberry pi 3b上),因为只要发出“停靠停止”就会破坏服务(锁文件不会被清除)。

我的互联网研究显示,当脚本收到终止信号时,人们使用bash命令“陷阱”执行命令。

我尝试了以下几点:

代码语言:javascript
复制
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会话中):

代码语言:javascript
复制
docker kill --signal="INT" trap
docker kill --signal="SIGINT" trap

此外,我尝试使用由“码头停止”发送的默认信号,但这导致控制台等待~10s (默认的停靠停止超时),然后杀死码头容器。

代码语言:javascript
复制
docker stop trap

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

我真的很感谢你的帮助。

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

代码语言:javascript
复制
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‘捕获信号。我用另一张照片试过了,效果很好:

代码语言:javascript
复制
$ docker run -it --name trap digitallyseamless/archlinux-armv6h /bin/bash -c " trap 'echo shutting down ; exit 0' SIGTERM; echo waiting; read"

停止使用(从另一个码头)的集装箱

代码语言:javascript
复制
$ docker stop trap

然后查看容器输出。

代码语言:javascript
复制
$ docker logs trap
waiting
shutting down

由于我没有特殊的需要使用特定的图像(它实际上只是一种让我达到目标的方法),所以我只需要交换图像。

PS:非常感谢@tkausl

EN

回答 2

Stack Overflow用户

发布于 2016-10-31 10:00:40

正如我在注释中提到的,docker stop发送一个SIGTERM。根据您的编辑,这并不适用于您,但是,我只是使用完全相同的命令(虽然将图像更改为ubuntu )来尝试它,并且它可以工作。你可能是从跑步箱里分离出来的吗?在本例中,您显然看不到消息,移除--rm标志并查看docker logs

我是怎么做到的:

在一个终点站:

代码语言:javascript
复制
docker run --rm -it --name trap ubuntu /bin/bash -c " trap 'echo shutting down ; exit' SIGTERM; echo waiting; read"

在第二个终端中:

代码语言:javascript
复制
$ docker stop f6
f6

停下来后,我在第一个航站楼看到的是:

代码语言:javascript
复制
$ docker run --rm -it --name trap ubuntu /bin/bash -c " trap 'echo shutting down ; exit' SIGTERM; echo waiting; read"
waiting
shutting down    
$
票数 1
EN

Stack Overflow用户

发布于 2016-10-30 18:50:01

码头拦截和码头杀手正在发送信号,而不是陷阱命令。你必须做一个docker exec container_name trap

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40332365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档