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
相关产品推荐
相关产品推荐

