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

Docker Compose健康检查显错但无日志,容器退出问题求助

问题分析

你的核心误解在于Docker Healthcheck的运行时机——它只能在容器处于运行状态时执行,而你的kibana_setup容器执行完初始化命令后就直接退出了(退出码0表示命令正常执行完毕),容器停止后healthcheck不会被触发,导致hello_world的service_healthy依赖条件永远无法满足,最终报错。

解决方案

针对你的一次性初始化任务场景,有两种可行方案:

方案1:让容器保持运行以触发healthcheck

修改kibana_setup的command,在初始化命令后添加一个阻塞进程,让容器持续运行,这样healthcheck能按配置正常执行:

command: >
  bash -c 'echo hello > /usr/share/kibana/keystore/kibana.keystore; tail -f /dev/null'

tail -f /dev/null会让容器一直处于运行状态,healthcheck检测到文件存在后,hello_world就会启动。

方案2:改用"任务完成"依赖条件

因为kibana_setup是一次性初始化任务,不需要容器持续运行,直接使用Docker Compose的service_completed_successfully条件(需Compose版本3.9及以上),只要容器正常退出(退出码0)就视为满足依赖:

hello_world:
  depends_on:
    kibana_setup:
      condition: service_completed_successfully

这种方案更贴合初始化任务场景,无需额外维持容器运行,也不需要healthcheck。

补充说明
  • 容器退出后,Docker不会再对它执行healthcheck,healthcheck仅针对运行中的容器生效。
  • 宿主机上生成了目标文件,说明kibana_setup的初始化命令已成功执行,容器退出是命令执行完毕后的正常行为,和healthcheck无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:11:16