要求在一个大的while循环内,给定特定的docker容器ID,我需要使用docker event命令监视docker stop事件。找到事件后,我需要退出读取的docker事件。
我编写的简化bash脚本如下:
#! /bin/bash
while true
do
## other logics
docker events --filter='container=...' --filter='event=stop' | while read event
do
echo $event
break
done
echo "got here"
## other logics
done
因此,在一个bash session 中,我将运行此脚本,在另一个bash session 中,我将键入以下命令:
docker容器停止cassandra-1
问题是当我执行此bash程序时,我可以捕获stop事件并打印事件,但是此命令将重复读取事件。如何退出Docker事件并打印“此处获得”?
我花了大量时间在网上搜索解决方案,但找不到任何好的方法。我曾经考虑使用break,但是它不起作用,我也考虑过kill -9 $$,但是我将退出整个脚本程序。但是我只需要退出docker事件,而不是大while循环。
有什么好的建议吗?非常感谢!
最佳答案
我找到了解决方案。关键是要了解docker event命令的实际工作方式。根据我的研究,docker事件将生成一个进程,并停留在前台进程中。您应按CTRL + C退出(请参阅:https://docs.docker.com/engine/reference/commandline/events)。因此,您不能使用break来摆脱它。方法是在后台作业中执行docker event命令,并在发现事件时将其杀死。
代码如下:
(docker events --filter 'container='"$container_id"'' --filter 'event=stop' &) | while read event
do
# kill this backgroud process
pkill -f "docker event.*stop"
done
关于bash - 阅读docker事件时,如何退出docker事件而不是整个程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53453967/