我试图使用dockerode来访问Docker。
我的目标是获取多节点群中所有容器的容器数据。
docker.listContainers( {all: true } )的作用域似乎只返回在调用节点上运行的容器,在我的例子中是manager节点。https://docs.docker.com/engine/api/v1.37/#operation/ContainerList
在命令行上,您可以使用docker service ps <service_name>获取容器id,然后调用容器检查。
$ 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将返回预期的数据,作为其在manager节点上的数据。
发布于 2021-01-22 15:04:51
当使用GET /containers/json端点时,docker只返回本地运行的容器,因此当试图在另一个码头引擎上返回容器时,预期会有404。群管理器只能返回整个聚类的群对象。常规容器不是成群的对象。
当与群模式交互时,您可以列出群服务和群任务。GET /services和GET /tasks.因为任务确实是一个群模式对象,所以您可以从任何管理器中列出整个群集的所有任务。
然后,任务继续在群中的各个节点上创建容器。如果要在整个群集中列出容器,则必须在每个节点上直接使用GET /containers/json API端点。
这些API端点类似于以下命令:
GET /containers/json - docker container lsGET /services - docker service lsGET /tasks?filter=... - docker service ps ... (关于正确的过滤语法,请参阅文档)为了提高可读性,我在Docker的上下文中而不是在任何一个docker库的上下文中回答了这个问题。
https://stackoverflow.com/questions/65847001
复制相似问题