如何使用 dockerode 或 docker api 在多主机群上模拟 'docker service ps'?
How to mimic 'docker service ps' on a multi host swarm using dockerode or docker api?
我正在尝试使用 dockerode 访问 Docker API。
我的目标是获取多节点群中所有容器的容器数据。
看来 docker.listContainers( {all: true } )
的范围仅限于调用节点上的 returns 个容器 运行,在我的例子中是我的管理器节点。
https://docs.docker.com/engine/api/v1.37/#operation/ContainerList
我们如何使用 dockerode 获取 swarm 中所有容器的列表?
我们如何使用 dockerode 获取与服务关联的所有容器的列表?
在命令行中,可以使用docker service ps <service_name>
获取容器id获取容器id,然后在容器上调用inspect。
$ 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) returns 404 的简单示例。调用 m1x8e2w5dyvr returns 管理节点上的预期数据。
当使用 GET /containers/json
端点时,docker API 只会 return 在本地 运行 容器,因此在尝试 return 另一个 docker 引擎上的容器。 Swarm 管理器只能 return 为整个集群设置 swarm 对象。常规容器不是群对象。
在与 swarm 模式交互时,您可以列出 swarm 服务和 swarm 任务。 GET /services
和 GET /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 库的上下文中回答了这个问题。
我正在尝试使用 dockerode 访问 Docker API。
我的目标是获取多节点群中所有容器的容器数据。
看来 docker.listContainers( {all: true } )
的范围仅限于调用节点上的 returns 个容器 运行,在我的例子中是我的管理器节点。
https://docs.docker.com/engine/api/v1.37/#operation/ContainerList
我们如何使用 dockerode 获取 swarm 中所有容器的列表?
我们如何使用 dockerode 获取与服务关联的所有容器的列表?
在命令行中,可以使用docker service ps <service_name>
获取容器id获取容器id,然后在容器上调用inspect。
$ 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) returns 404 的简单示例。调用 m1x8e2w5dyvr returns 管理节点上的预期数据。
当使用 GET /containers/json
端点时,docker API 只会 return 在本地 运行 容器,因此在尝试 return 另一个 docker 引擎上的容器。 Swarm 管理器只能 return 为整个集群设置 swarm 对象。常规容器不是群对象。
在与 swarm 模式交互时,您可以列出 swarm 服务和 swarm 任务。 GET /services
和 GET /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 库的上下文中回答了这个问题。