gpt4 book ai didi

bash - 阅读docker事件时,如何退出docker事件而不是整个程序?

转载 作者:行者123 更新时间:2023-12-02 19:29:05 25 4
gpt4 key购买 nike

要求在一个大的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/

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