Docker SDK:无法从 Leader 节点获取 Worker 节点上的准确容器数量

Docker SDK:无法从 Leader 节点获取 Worker 节点上的准确容器数量

我有一个包含三个 Manager 和一个 Worker 的 Swarm。我还有一个 monitor_service,它尝试使用 Docker SDK for Python 获取 tracked_service 中的实际容器数量。此 tracked_service 位于 Worker 节点上。

如果我正在处理不在 Swarm 上的服务,我将使用以下 docker SDK 方法获取该服务中容器的准确数量:

dockerClient = docker.from_env()
containers = dockerClient.containers.list(filters={"name": tracked_service_stack_prefix})
containerCount = len(containers)

然而,在 swarm 上,上述代码导致 containerCount 为 0。我认为这是因为 Docker SDK 只能在 Leader 节点上执行容器方法,而忽略了 swarm 中的所有其他节点。由于我的 target_service 在 Worker 节点上,因此我无法找到其容器数量。

有什么方法可以获取位于非 Leader 节点上的服务中的容器数量吗?

附注:我不是在谈论服务副本或任务数量。我发现这些数字只是所需的容器数量——而不是实际数量。谢谢!

答案1

在 Low-Level Docker API 中找到了解决方案(https://docker-py.readthedocs.io/en/stable/api.html):

apiClient = docker.APIClient()
tasks = apiClient.tasks(filters={"name": 'target_service_stack_prefix', "desired-state": 'running'})
... # Apply any additional, not built-in filters by parsing the resulting list.

相关内容