STATUS 中的“(健康)”字符串代表什么?

What does the "(healthy)" string in STATUS stands for?

STATUS 列中的“(健康)”字符串代表什么?

user@user:~# docker ps

CONTAINER ID  IMAGE   COMMAND  CREATED   STATUS                   PORTS  NAMES

X             X       X        X         Up 20 hours              X      X

X             X       X        X         Up 21 hours (healthy)    X      X

https://ryaneschinger.com/blog/using-docker-native-health-checks/

通常它是您启动的东西,以启用 swarm 或其他服务来检查容器的健康状况。

IE:

$ docker run --rm -it \
     --name=elasticsearch \
     --health-cmd="curl --silent --fail localhost:9200/_cluster/health || exit 1" \
     --health-interval=5s \
     --health-retries=12 \
     --health-timeout=2s \
     elasticsearch

查看运行时启用的健康检查?

这是 HEALTHCHECK instruction 的结果。该指令每 30 秒在容器内运行一个命令。如果命令成功,则容器被标记为健康。如果它失败太多次,它就会被标记为不健康。

您可以设置间隔、超时、重试次数和启动延迟。

例如,以下将检查您的容器是否每 5 分钟响应一次 HTTP,超时为 3 秒。

HEALTHCHECK --interval=5m --timeout=3s \
  CMD curl -f http://localhost/ || exit 1

当健康状态发生变化时,您会收到一个 health_status 事件。您可以通过 docker events.

关注那些和其他人

表示他们正在使用命令:healthcheck

https://docs.docker.com/engine/reference/builder/#healthcheck

当容器指定了健康检查时,它除了正常状态外还有健康状态。此状态最初为 starting。每当健康检查通过时,它就会变成 healthy(无论它之前处于什么状态)。连续失败一定次数后,变成不健康.

**starting**  – Initial status when the container is still starting
**healthy**   – If the command succeeds then the container is healthy
**unhealthy** – If a single run of the  takes longer than the specified 
  timeout then it is considered unhealthy. If a health check fails then the 
  will run retries number of times and will be declared unhealthy 
  if the  still fails.

Reference