【问题标题】:How to get currently running containers of a service using Docker Engine API?如何使用 Docker Engine API 获取当前正在运行的服务容器?
【发布时间】:2019-12-12 15:07:10
【问题描述】:

我正在尝试获取当前正在运行的服务容器,以便像在 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"
            }
        ]
    }
}

【问题讨论】:

    标签: api docker docker-engine


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      相关资源
      最近更新 更多