0

我正在尝试获取当前正在运行的服务容器,以便像在 Portainer.io 中一样将它们可视化。

Portainer 显示当前运行的机器和副本,如5/8

/services我可以使用带有端点的引擎 api 获得所需的副本号。我找不到的是当前正在运行的服务容器。

服务端点返回类似的结果;

{
    "ID": "frf43534t43543t43gt435",
    "Version": {
        "Index": 10936
    },
    "CreatedAt": "2019-12-11T14:36:03.361254384Z",
    "UpdatedAt": "2019-12-11T14:40:19.911714617Z",
    "Spec": {
        "Name": "connector-service",
        "Labels": {
            "com.docker.stack.image": "connector",
            "com.docker.stack.namespace": "conn"
        },
        "TaskTemplate": {
            "ContainerSpec": {
                "Image": "connector:latest",
                "Labels": {
                    "com.docker.stack.namespace": "conn"
                },
                "Hostname": "connector-service{{.Task.Slot}}",
                "Env": [
                    "CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR=3",
                    "CONNECT_STATUS_STORAGE_REPLICATION_FACTOR=3"
                ],
                "Privileges": {
                    "CredentialSpec": null,
                    "SELinuxContext": null
                },
                "Isolation": "default"
            },
            "Resources": {},
            "Placement": {},
            "Networks": [
                {
                    "Target": "sfer32432fr4ewt4r3g4tr54",
                    "Aliases": [
                        "connector-service"
                    ]
                }
            ],
            "ForceUpdate": 0,
            "Runtime": "container"
        },
        "Mode": {
            "Replicated": {
                "Replicas": 6
            }
        },
        "EndpointSpec": {
            "Mode": "vip",
            "Ports": [
                {
                    "Protocol": "tcp",
                    "TargetPort": 8083,
                    "PublishedPort": 8083,
                    "PublishMode": "ingress"
                }
            ]
        }
    },

    "Endpoint": {
        "Spec": {
            "Mode": "vip",
            "Ports": [
                {
                    "Protocol": "tcp",
                    "TargetPort": 8083,
                    "PublishedPort": 8083,
                    "PublishMode": "ingress"
                }
            ]
        },
        "Ports": [
            {
                "Protocol": "tcp",
                "TargetPort": 8083,
                "PublishedPort": 8083,
                "PublishMode": "ingress"
            }
        ],
        "VirtualIPs": [
            {
                "NetworkID": "safcedsvcsg4425r32dsf",
                "Addr": "10.0.0.55/24"
            },
            {
                "NetworkID": "sfsfe4233fr3g435432greg43",
                "Addr": "10.0.3.11/24"
            }
        ]
    }
}
4

1 回答 1

0

我已经意识到在引擎 API 容器中可以使用两个端点来检索;第一个是/containers,第二个是/tasks。例如,为了让服务/任务端点的运行容器具有两个过滤器,可以使用;http://192.168.4.142:1777/v1.40/tasks?filters={"service":{"my-service":true},"desired-state":{"running":true}}

此端点返回服务的运行容器总数,/services端点返回所需的数量,因此可以找到正在运行的所需容器的数量。

于 2019-12-12T07:07:10.930 回答