如何在 docker 日志中记录 docker 健康检查状态?
How to log docker healthcheck status in docker logs?
Objective
我想通过验证 docker 日志来检查我的 docker 容器是否健康。
要求
我有 两个文件,即 Dockerfile
和 loop.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;
观察
- 观察 1
docker logs
只输出loop.sh
中提到的integer 1
,不输出我的docker的健康状态。下面附上一张图片-
- 观察 2
docker ps
命令显示容器是健康的,因此推断我的健康检查正在运行。请在下面找到所附图片-
- 观察 3
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
只是一个虚拟命令,它保持容器 运行。
Objective
我想通过验证 docker 日志来检查我的 docker 容器是否健康。
要求
我有 两个文件,即 Dockerfile
和 loop.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;
观察
- 观察 1
docker logs
只输出loop.sh
中提到的integer 1
,不输出我的docker的健康状态。下面附上一张图片-
- 观察 2
docker ps
命令显示容器是健康的,因此推断我的健康检查正在运行。请在下面找到所附图片-
- 观察 3
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
只是一个虚拟命令,它保持容器 运行。