如何在docker日志中记录docker healthcheck状态?

joh*_*ich 6 logging docker dockerfile

客观的

我想通过验证 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"]
Run Code Online (Sandbox Code Playgroud)

循环语句

#!/bin/sh

while 1>0;do echo "1"; sleep 2; done;
Run Code Online (Sandbox Code Playgroud)

观察

  • 观察1

docker logs输出integer 1中提到的内容,loop.sh但不输出我的泊坞窗的健康状态。下面附有一张图片 -
docker日志的输出

  • 观察2

docker ps命令显示容器运行状况良好,因此推断我的运行状况检查正在运行。请找到下面的附图 -

Docker ps 命令的输出

  • 观察3

docker inspect命令还显示 docker 容器的健康状态。请找到下面的屏幕截图 -
健康状况

问题

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

Han*_*ian 11

好吧,这太黑客了,我并不为此感到自豪。问题是健康检查运行在与主进程不同的进程中,因此很难写入主进程'stdout

但是您可以利用主进程(通常)作为进程 #1 运行并写入/proc/1/fd/1which is that process' stdout。像这样的东西

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

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