列出相同 docker-compose 中的容器
List containers in the same docker-compose
我正在开发一个利用 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-compose project name label (com.docker.compose.project
过滤容器的函数), 但现在我有一个硬编码的项目名称而不是容器名称。有没有办法获取当前项目名称,或者有其他方法获取同一个compose中的容器列表吗?
谢谢
这只是我突然想到的一个想法。
当您在看门狗容器中使用 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
新的(2021 年 6 月)docker compose V2 可以通过以下方式简化此查询:
docker compose ls
List running compose projects
由于 compose 是 Docker 命令的一部分,您可以从 python 程序中调用它。
我正在开发一个利用 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-compose project name label (com.docker.compose.project
过滤容器的函数), 但现在我有一个硬编码的项目名称而不是容器名称。有没有办法获取当前项目名称,或者有其他方法获取同一个compose中的容器列表吗?
谢谢
这只是我突然想到的一个想法。
当您在看门狗容器中使用 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
新的(2021 年 6 月)docker compose V2 可以通过以下方式简化此查询:
docker compose ls
List running compose projects
由于 compose 是 Docker 命令的一部分,您可以从 python 程序中调用它。