在同一个docker-compose中列出容器
我正在研究一个利用docker-compose
的应用程序。 其中一个容器是一个看门狗组件,它定期运行一个小型的python脚本来获取兄弟容器的状态,并在其中一个容器停止时采取行动。
到目前为止,我使用了应该被监视的所有容器名称的列表,但是现在我想知道它可以只监视由同一个docker-compose
命令创build的所有容器。
以前,代码看起来像这样:
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
不知道dockerpy
docker-compose
,所以我创build了一个基于com.docker.compose.project
-compose项目名称标签( com.docker.compose.project
)过滤容器的函数,但现在我有一个硬编码的项目名称而不是容器名。 有没有办法获得当前的项目名称,或者有其他方式来获取相同的组成的容器列表?
谢谢
这只是我脑海中一个快速的想法。
当您在看门狗容器中使用Docker客户端库时,我假设您可以从看门狗容器中访问主机的Docker API。 由于默认情况下每个容器的主机名都是容器ID,因此您可以使用它来让看门狗容器从Docker API中查找自己的标签。
以下是使用Docker CLI的示例; Python SDK应该以完全相同的方式工作:
$ COMPOSE_PROJECT=$(docker inspect -f '{{ (index .Config.Labels "com.docker.compose.project") }}' $HOSTNAME)
然后使用项目名称来获取剩余的容器:
$ docker ps -aq -f label=com.docker.compose.project=$COMPOSE_PROJECT