如何为Docker Compose中Pentaho Data Integration(PDI)容器配置健康检查
问题根因说明
- 第一个
Invalid interpolation format报错是因为Docker Compose会默认解析配置中的$字符为环境变量占位符,你写的$?会被识别为要读取名为?的环境变量,不符合语法规则导致报错。 - 第二个配置后容器一直显示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:健康检查仅验证容器存活、作业已执行成功(推荐,适合作业不可重入的场景)
不需要重复执行作业,仅通过标记文件判断状态,轻量且无副作用:
- 先修改你的
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
- 再修改Docker Compose健康检查配置,仅判断标记文件是否存在:
healthcheck: test: ["CMD", "test", "-f", "/tmp/pdi_job_success"] interval: 10s timeout: 2s retries: 3 start_period: 120s # 可根据你的作业实际运行时长调整
内容的提问来源于stack exchange,提问作者Prabuddha Kulatunga
相关产品推荐
相关产品推荐

