You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用pidof配置Docker容器健康检查?CMD-SHELL与内联命令选哪个?

Docker健康检查:CMD-SHELL vs 内联命令

先给结论:两种写法在你的场景下都能正常工作,但推荐用CMD-SHELL的数组格式,原因如下:

两种写法的本质差异

  • 内联字符串格式(test: pidof myservice || exit 1):Docker会自动把它包装成/bin/sh -c "pidof myservice || exit 1"执行
  • CMD-SHELL数组格式(test: ["CMD-SHELL", "pidof myservice || exit 1"]):明确指定用shell解析执行命令,和内联写法的底层逻辑一致,但更符合Docker官方推荐的显式配置风格,能避免一些特殊字符(比如管道、重定向)的解析歧义

结合你的supervisord场景的优化建议

你当前用pidof检查进程存在性,虽然简单,但有个小隐患:如果myservice进程意外退出,supervisord正在重启它的间隙,pidof会返回失败,可能误判健康状态。

更可靠的方式是直接通过supervisord检查服务状态,把健康检查命令改成:

healthcheck:
  test: ["CMD-SHELL", "supervisorctl status myservice | grep -q RUNNING || exit 1"]

这样能准确判断服务是否处于正常运行状态,而不是仅仅检查进程是否存在。

总结

  • 若坚持用pidof,两种写法都可行,优先选CMD-SHELL数组格式
  • 更推荐基于supervisord的状态检查,准确性更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:42:35