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

Docker Compose中Juice-Shop健康检查失败致测试容器无法启动问题

解决Docker Compose中Juice-Shop健康检查失败导致测试容器无法启动的问题

问题背景

通过Docker Compose部署Juice-Shop应用容器和集成测试容器,已配置Juice-Shop的健康检查规则,且测试容器依赖service_healthy条件。执行docker compose up时提示dependency failed to start: container juice-shop is unhealthy,测试容器无法启动,但浏览器可正常访问http://localhost:3000/#/,Juice-Shop容器实际运行正常。

原因分析

  1. 健康检查工具缺失:官方bkimminich/juice-shop镜像默认未安装curl,原健康检查命令中使用curl发起请求,会因命令不存在执行失败,返回非0状态码,导致容器被标记为unhealthy。
  2. 网络访问路径冗余:健康检查在容器内部执行,使用网络别名juice-shop-service属于冗余操作,直接访问localhost更可靠,无需依赖外部网络解析。
  3. 启动时长不足:Juice-Shop启动需完成数据库初始化、服务加载等步骤,原start_period: 30s可能不足以让服务完全就绪。

解决方案

修改Juice-Shop服务的健康检查配置,替换为容器内置工具支持的命令,并调整启动等待时长:

方案1:使用wget进行健康检查

wget是官方镜像内置工具,通过--spider模式仅检查目标URL是否可访问,不下载内容:

services:
  juice-shop:
    # 其他配置不变
    healthcheck:
      test: ["CMD-SHELL", "wget --spider -q http://localhost:3000 || exit 1"]
      interval: 10s
      retries: 5
      start_period: 60s  # 延长启动等待时长
      timeout: 5s

方案2:使用nc检查端口连通性

如果仅需验证服务端口是否监听,可使用nc工具检查3000端口:

services:
  juice-shop:
    # 其他配置不变
    healthcheck:
      test: ["CMD", "nc", "-z", "localhost", "3000"]
      interval: 10s
      retries: 5
      start_period: 60s
      timeout: 5s

验证修改效果

  1. 执行docker compose down清理原有容器
  2. 执行docker compose up --build重新部署
  3. 通过docker inspect juice-shop查看容器健康状态,确认Health.Status为healthy

内容的提问来源于stack exchange,提问作者Sal-laS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:54:59