You need to enable JavaScript to run this app. 如何为Docker Compose中Pentaho Data Integration(PDI)容器配置健康检查
优惠活动
大模型
产品
解决方案
定价
更多

如何为Docker Compose中Pentaho Data Integration(PDI)容器配置健康检查

问题根因说明

  1. 第一个Invalid interpolation format报错是因为Docker Compose会默认解析配置中的$字符为环境变量占位符,你写的$?会被识别为要读取名为?的环境变量,不符合语法规则导致报错。
  2. 第二个配置后容器一直显示unhealthy,大概率是因为健康检查会周期性重复执行kitchen命令,而你的作业已经在entrypoint中执行过一次,不可重复执行导致返回非0退出码。

可用配置方案

根据你的使用场景可以二选一:

方案1:健康检查需要验证作业可正常执行(仅适合作业可重入的场景)

使用CMD数组写法避免Shell解析和插值问题,同时设置足够长的启动等待期,避免作业还没跑完就被判定不健康:

healthcheck:
  test: ["CMD", "/bin/sh", "-c", "/home/data-integration/kitchen.sh -file='/home/jobs/my.kjb' -level=Basic > /dev/null 2>&1"]
  interval: 30s
  timeout: 60s
  retries: 3
  start_period: 120s # 可根据你的作业实际运行时长调整

方案2:健康检查仅验证容器存活、作业已执行成功(推荐,适合作业不可重入的场景)

不需要重复执行作业,仅通过标记文件判断状态,轻量且无副作用:

  1. 先修改你的entrypoint.sh,作业执行成功后生成健康标记文件:
#!/bin/sh
## entrypoint.sh
/home/data-integration/kitchen.sh -file="/home/jobs/my.kjb" -level=Basic
# 作业执行成功则生成标记
if [ $? -eq 0 ]; then
  touch /tmp/pdi_job_success
fi
tail -f /dev/null
  1. 再修改Docker Compose健康检查配置,仅判断标记文件是否存在:
healthcheck:
  test: ["CMD", "test", "-f", "/tmp/pdi_job_success"]
  interval: 10s
  timeout: 2s
  retries: 3
  start_period: 120s # 可根据你的作业实际运行时长调整

内容的提问来源于stack exchange,提问作者Prabuddha Kulatunga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 14:57:03