有没有办法知道是否在另一个容器中重新启动了Docker容器?

时间:2019-08-19 08:19:38

标签: docker containers

我需要知道其他容器是否已重新启动才能在我的容器中运行某些命令。有没有办法知道容器在另一个容器中重新启动?

1 个答案:

答案 0 :(得分:2)

您没有提供任何详细信息,所以我假设两个容器都在同一主机上运行。在这种情况下,一个简单的解决方案是从docker获取重启事件 守护程序在主机上运行,​​然后将信号发送到另一个容器。 docker events可以轻松做到这一点

例如使用docker-compose服务名称在主机上运行,​​以过滤为重新启动容器通知的事件:

docker events | grep --line-buffered 'container restart.*com.docker.compose.service=<compose_service_name>' | while read ; do docker kill --signal=SIGUSR1 my_ubuntu ; done

docker kill --signal=SIGUSR1 my_ubuntuUSR1信号发送到另一个需要运行命令的容器。要对其进行测试,请使用sigtrap的{​​{1}}运行ubuntu:

USR1

现在重新启动容器,信号处理程序将在另一个容器内执行docker run --rm --name my_ubuntu -it ubuntu /bin/bash -c "trap 'echo signal received' USR1; while :; do echo loop; sleep 10 & wait ${!}; done;" 。可以用real命令代替它。

docker事件是Docker REST API的一部分(请参见Monitor Docker's events),因此,如果另一个容器可以连接到主机上运行的docker守护程序,则它可以直接获取重启通知。

希望有帮助。