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

Docker配置Healthchecks.io健康检查后容器状态异常求助

问题排查与解决方案

核心问题分析

你遇到的health: starting状态持续、Healthchecks.io无ping请求的问题,大概率和容器内网络路由(VPN拦截)、健康检查命令执行环境或命令本身的执行失败有关,以下是具体排查和解决步骤:


1. 先手动验证健康检查命令在容器内的可行性

这是最关键的一步,先确认命令本身能在容器内正常执行:

  • 进入容器:
    docker exec -it <你的容器ID/名称> /bin/bash
    
  • 执行健康检查命令并查看退出码:
    /bin/curl -Ss --fail https://hc-ping.com/UUID
    echo $? # 0=执行成功,非0=执行失败
    

根据错误信息针对性处理:

  • 若提示SSL certificate problem:临时可添加--insecure参数测试(生产环境建议安装完整CA证书);
  • 若提示Could not resolve host:说明DNS被VPN拦截,可指定公共DNS执行命令:
    /bin/curl -Ss --fail --dns-servers 8.8.8.8 https://hc-ping.com/UUID
    
  • 若提示Connection timed out:100%是VPN路由拦截了请求,需要让健康检查流量绕过VPN(见下文特殊解决方案)。

2. 修正健康检查的配置逻辑

从docker inspect输出看,你设置的--health-retries=5被自动改为12,这是Docker对start-period和retries的组合逻辑导致的,可临时调整参数快速测试:

docker run \
  # 其他容器参数...
  --health-cmd="/bin/curl -Ss --fail https://hc-ping.com/UUID || exit 1" \
  --health-interval=10s \ # 缩短间隔快速触发检查
  --health-retries=3 \
  --health-timeout=5s \
  --health-start-period=30s \
  binhex/arch-delugevpn

同时,可明确指定shell执行命令,避免容器默认shell差异:

--health-cmd='sh -c "/bin/curl -Ss --fail https://hc-ping.com/UUID || exit 1"'

3. 针对VPN容器的特殊解决方案

binhex/arch-delugevpn默认将所有流量走VPN路由,健康检查请求会被拦截,可通过以下方式绕过:

  • 直接使用IP访问+Host头:先解析hc-ping.com的IP,然后执行命令:
    --health-cmd="/bin/curl -Ss --fail --header 'Host: hc-ping.com' https://<解析到的IP>/UUID || exit 1"
    
  • 添加VPN路由例外:参考binhex容器文档,通过环境变量或挂载配置文件,将hc-ping.com加入VPN旁路列表,让该地址的请求直接走本地网络。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:12:35