0

有没有办法在使用 docker-py SDK创建新服务时指定运行状况检查命令?

此选项在使用标志“--health-cmd”的 docker cli以及创建新容器运行时的 SDK 中可用,但即使使用低级别,我也找不到为服务指定运行状况检查命令的方法API。

4

1 回答 1

0

SDK 中没有任何功能。因此,在他们的 git repo 上打开问题并要求他们添加该功能。到那时您可以使用我构建的以下解决方法

from docker import client
from docker.models.services import CONTAINER_SPEC_KWARGS
from docker.types.services import ContainerSpec

init_spec = ContainerSpec.__init__


def override_init(self, *args, **kwargs):
    self['HealthCheck'] = kwargs.pop("HealthCheck")
    init_spec(self, *args, **kwargs)

ContainerSpec.__init__ = override_init

if 'HealthCheck' not in CONTAINER_SPEC_KWARGS:
    CONTAINER_SPEC_KWARGS.append('HealthCheck')


c = client.from_env()

result = c.services.create(name="nginx", image="nginx",
                           HealthCheck={
                               "Test": ["CMD", "ls", "-alh"],
                               "Interval": 1000000 * 500, # 500 ms
                               "Timeout": 1000000 * 5 * 1000, # 5 seconds
                               "Retries": 3,
                               "StartPeriod": 1000000 * 5 * 1000 # 5 seconds
                           })

print(result)

并输出如下

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                        PORTS               NAMES
f617eaf4d211        nginx:latest        "nginx -g 'daemon ..."   About a minute ago   Up About a minute (healthy)   80/tcp              nginx.1.htgg23ysze00qr0kb790lyxnv
于 2017-09-28T09:21:27.130 回答