我正在建立我的自定义pdi图像使用码头。我可以建立形象和运行它没有任何问题。现在,我需要为我的pdi容器添加健康检查。,有人能给我建议一个健康检查命令吗?
我试着用,
healthcheck:
test: /home/data-integration/kitchen.sh -file="/home/jobs/my.kjb" -level=Basic && echo $? || exit 1 但是给出了一个错误,如,ERROR: Invalid interpolation format for "healthcheck" option in service "pentaho": "/home/data-integration/kitchen.sh -file="/home/jobs/my.kjb" -level=Basic && echo $? || exit 1"
如果我像下面这样使用healthcheck命令,它就变成了、不健康的,即使没有任何错误。
healthcheck:
test: /home/data-integration/kitchen.sh -file="/home/jobs/my.kjb" -level=Basic || exit 1 如果我从码头检查containerID那里找到的话,

#!/bin/sh
## entrypoint.sh
/home/data-integration/kitchen.sh -file="/home/jobs/my.kjb" -level=Basic
tail -f /dev/null当我手动运行作业文件并检查回送$时?如果作业成功,它提供0作为输出。如何正确使用它在码头-撰写健康检查?
发布于 2021-08-05 02:15:55
找到pdi容器的健康检查,我会在这里张贴,因为这可以帮助其他人。
基本上,当一个作业执行时没有任何错误,它返回0作为退出代码。但是,当出现错误时,它通常返回1作为退出代码,就像我发现的那样。
因此,检查所需的pdi作业执行命令的退出代码状态,并将其用于健康检查,如下所示,
创建healthcheck.sh文件并将其复制到容器中(在这里,我将其复制到容器内的/home/script/ path )。
#!/bin/sh
set -e
## execute job
/home/data-integration/kitchen.sh -file="/home/jobs/my.kjb" -level=Basic
## Job executed without errors? Use exit status of the job command ##
if [ $? -eq 0 ]
then
echo "Success"
exit 0
else
echo "Failure" >&2
exit 1
fi然后在healthcheck.sh中运行docker-compose.yml文件(使用2.3docker-Compose.yml版本)
healthcheck:
test: ./home/scripts/healthcheck.sh
interval: 55s
timeout: 50s
retries: 3
start_period: 9m注:
healthcheck:
test: chmod +x /home/scripts/healthcheck.sh && ./home/scripts/healthcheck.sh
interval: 55s
timeout: 50s
retries: 3
start_period: 9m#!/bin/sh
## entrypoint.sh
while :
do
/home/data-integration/kitchen.sh -file="/home/jobs/my.kjb" -level=Basic
sleep 120
done参考资料:
发布于 2021-08-04 01:04:57
作为一个新用户,我还不能评论,所以我希望这个答案能给你一些思考。
思想食粮
根据有关健康检查的Docker文档,格式如下:https://docs.docker.com/engine/reference/builder/#healthcheck
我不太熟悉您的应用程序,但是如果需要启动,那么设置一个延迟来给容器初始化时间可能会有帮助。
我还看到,您在入口点脚本中使用的命令与用于健康检查的命令相同。
健康检查通常不应与正在运行的进程相同,而应用于确保正在运行的进程正常工作。文档和这个博客一样强调了这一点,详细说明了如何通过点击服务器来检查web应用程序是否还活着。
另一个注意事项是,如果入口点尾dev为null,则不会通过docker logs获取正在运行的进程的日志。如果您想安排一个任务经常在容器中运行,我建议将您的命令包装在一个调用命令的while循环中,或者使用外部调度器,比如Kubernetes Cron Jobs (编辑:甚至在调用docker run的主机上使用crontab )。
修复
最后,如果您只是简单地修复了当前的格式化问题,则需要在健康检查中转义$字符,如下所示:
test: /home/data-integration/kitchen.sh -file="/home/jobs/my.kjb" -level=Basic && echo $$? || exit 1与此类似的其他问题包括:我怎样才能逃过码头撰写文件中的美元签名呢?
它链接到变量转义上的文档,在这里:https://docs.docker.com/compose/compose-file/compose-file-v3/#variable-substitution
https://stackoverflow.com/questions/68643554
复制相似问题