我需要知道其他容器是否已重新启动才能在我的容器中运行某些命令。有没有办法知道容器在另一个容器中重新启动?
答案 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_ubuntu
将USR1
信号发送到另一个需要运行命令的容器。要对其进行测试,请使用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守护程序,则它可以直接获取重启通知。
希望有帮助。