如何在 docker 日志中记录 docker 健康检查状态?

How to log docker healthcheck status in docker logs?

Objective

我想通过验证 docker 日志来检查我的 docker 容器是否健康。

要求

我有 两个文件,即 Dockerfileloop.sh,我已将 HEALTHCHECK 添加到我的 docker 中,如下所示:

Dockerfile

FROM alpine
ADD . /
HEALTHCHECK --interval=1s --timeout=30s --retries=3 CMD echo {'health':'healthy'}
CMD ["sh","loop.sh"]

loop.sh

#!/bin/sh

while 1>0;do echo "1"; sleep 2; done;

观察

docker logs只输出loop.sh中提到的integer 1,不输出我的docker的健康状态。下面附上一张图片-

docker ps 命令显示容器是健康的,因此推断我的健康检查正在运行。请在下面找到所附图片-

docker inspect命令还显示了docker容器的健康状态。请看下面的截图-

问题

如何记录此 {'health':'healthy'} 健康检查状态,以便可以在 docker 日志中看到它?

好吧,这太hacky了,我并不以此为荣。问题是运行状况检查在与主进程不同的进程中运行,因此很难写入主进程' stdout.

但是您可以利用主进程(通常)作为进程 #1 运行并写入 /proc/1/fd/1,即进程'stdout。像这样

FROM ubuntu
HEALTHCHECK --interval=1s --timeout=30s --retries=3 CMD echo {'health': 'healthy'} | tee /proc/1/fd/1
CMD tail -f /dev/null

tail -f /dev/null 只是一个虚拟命令,它保持容器 运行。