我正在开发一个利用docker-compose
的应用程序。其中一个容器是一个看门狗组件,它定期运行一个小python脚本来获取同级容器的状态,并在其中一个容器停止时采取行动。
到目前为止,我使用了应该监视的所有容器名称的列表,但现在我想知道,我只需查看由同一个docker-compose
命令创建的所有容器。
以前,代码看起来如下所示:
watched_containers = ["component-a", "component-b"]
def inspect_containers():
containers = {
(container["Names"][0].lstrip("/"), container)
for container in docker.Client().containers(all=True)
}
for container_name in watched_containers:
if containers.get(container_name, {}).get("State") != "running":
alert_container_stopped(container_name)
我发现dockerpy
不知道docker-compose
,所以我创建了一个基于docker-组合项目名称标签(com.docker.compose.project
)过滤容器的函数,但是现在我有了一个硬编码的项目名称,而不是容器名称。是否有获取当前项目名称的方法,或者是否有其他方法获得相同组合中的容器列表?
谢谢
发布于 2017-01-30 18:44:13
这只是我头上的一个快速想法。
当您在看门狗容器中使用Docker客户端库时,我假设您可以从看门狗容器中访问主机的Docker。由于每个容器的主机名默认是容器ID,所以可以使用它让看门狗容器从Docker中查找自己的标签。
下面是一个使用Docker的示例;Python应该以完全相同的方式工作:
$ COMPOSE_PROJECT=$(docker inspect -f '{{ (index .Config.Labels "com.docker.compose.project") }}' $HOSTNAME)
然后使用项目名称获取剩余的容器:
$ docker ps -aq -f label=com.docker.compose.project=$COMPOSE_PROJECT
发布于 2021-06-30 19:15:01
https://stackoverflow.com/questions/41937975
复制相似问题