【问题标题】:How to mimic 'docker service ps' on a multi host swarm using dockerode or docker api?如何使用 dockerode 或 docker api 在多主机群上模拟“docker service ps”?
【发布时间】:2021-01-22 23:04:51
【问题描述】:

我正在尝试使用 dockerode 访问 Docker API。

我的目标是获取多节点集群中所有容器的容器数据。

似乎docker.listContainers( {all: true } ) 的范围仅返回在调用节点上运行的容器,在我的例子中是我的管理器节点。 https://docs.docker.com/engine/api/v1.37/#operation/ContainerList

  1. 我们如何使用 dockerode 获取 swarm 中所有容器的列表?

  2. 我们如何使用 dockerode 获取与服务关联的所有容器的列表?

在命令行可以通过docker service ps <service_name>获取容器id,获取容器id,然后调用inspect on container。

$ docker service ps classifier_8
ID                  NAME                IMAGE                                 NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
m1x8e2w5dyvr        classifier_8.1      scuba:qa-latest  master         Running             Running 26 minutes ago
8a04d2e18ee9        classifier_8.2      scuba:qa-latest  worker-0         Running             Running 26 minutes ago
a6b48751780b        classifier_8.3      scuba:qa-latest  worker-1         Running             Running 26 minutes ago

$ docker inspect a6b48751780b
[{...}]

即使是调用 dockerode.getContainer(a6b48751780b) 的简单示例也会返回 404。调用 m1x8e2w5dyvr 会返回管理节点上的预期数据。

【问题讨论】:

    标签: docker docker-api dockerode


    【解决方案1】:

    当使用 GET /containers/json 端点时,docker API 只会返回本地运行的容器,因此在尝试返回另一个 docker 引擎上的容器时应该会出现 404。 Swarm 管理器只能返回整个集群的 swarm 对象。常规容器不是 swarm 对象。

    与 swarm 模式交互时,可以列出 swarm 服务和 swarm 任务。 GET /servicesGET /tasks。由于任务确实是一个 swarm 模式对象,因此您可以从任何管理器列出整个 swarm 的所有任务。

    然后任务继续在集群中的各个节点上创建容器。如果要列出整个 swarm 中的容器,则必须直接在每个节点上使用 GET /containers/json API 端点。

    这些 API 端点类似于以下命令:

    • GET /containers/json - docker container ls
    • GET /services - docker service ls
    • GET /tasks?filter=... - docker service ps ...(有关正确的过滤语法,请参阅文档)

    我在 Docker API 的上下文中回答了这个问题,而不是在任何一个 docker API 库的上下文中,以提高可读性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-13
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 2019-08-25
      相关资源
      最近更新 更多