docker-py:是否可以向 services.create 添加健康检查命令?

docker-py: Is it possible to add healthcheck commands to services.create?

creating a new service 使用 docker-py SDK 时,是否可以指定健康检查命令?

此选项在 docker cli 中使用标志 '--health-cmd' 以及在创建新容器时在 SDK 中可用 运行 但我找不到方法即使在使用低级别 API.

时,也要为服务指定 healthcheck 命令

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