Как получить работающие в данный момент контейнеры службы с помощью Docker Engine API? - PullRequest
0 голосов
/ 11 декабря 2019

Я пытаюсь заставить работающие в данный момент контейнеры службы отображать их, как в Portainer.io.

Portainer показывает работающие в данный момент машины и реплики, такие как 5/8 .

Я могу получить желаемый номер реплики, используя API-интерфейс двигателя с /services конечной точкой. То, что я не смог найти, в настоящее время работает контейнеры службы.

Конечная точка службы возвращает результат, как;

{
    "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"
            }
        ]
    }
}

1 Ответ

0 голосов
/ 12 декабря 2019

Я понял, что в движке API контейнеры могут быть получены с двух конечных точек;первый / container , второй / tasks . Например, для запуска запущенных контейнеров службы / tasks можно использовать конечную точку с двумя фильтрами;http://192.168.4.142:1777/v1.40/tasks?filters={"service":{"my-service":true},"desired-state":{"running":true}}

Эта конечная точка возвращает общее количество запущенных контейнеров для службы, / services конечная точка возвращает желаемое число, чтобы можно было определить, сколько из требуемых контейнеров запущено.

...