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

GitHub Action内cURL docker compose栈失败 报exit code35 SSL错误

问题根因说明

--insecure参数仅会跳过服务端证书的有效性校验(包括自签证书不信任、域名不匹配、证书过期这类场景),不会干预TLS握手的协商流程,所以出现SSL握手错误时加这个参数本来就不会解决问题。

结合GitHub Action环境的特性,这个问题按出现概率从高到低有以下几个诱因:

  • 最高概率:访问地址使用错误。0.0.0.0是服务端监听用的特殊地址,代表绑定本机所有网卡接口,本身就不是客户端发起请求时应该使用的目标地址。你本地访问https://0.0.0.0:8001能通,是因为桌面版操作系统默认加了0.0.0.0指向回环网卡的路由规则,属于系统做的兼容处理;但GitHub Action使用的无桌面版Ubuntu runner默认没有这条路由规则,访问0.0.0.0时TCP连接就会出现异常,部分场景下会直接表现为SSL握手失败。把访问地址换成127.0.0.1或者localhost即可解决。
  • 次高概率:重试逻辑覆盖不全。你当前curl命令的--retry-connrefused参数只会在「连接被直接拒绝」时触发重试,但服务启动过程中可能已经开始监听端口,但TLS配置还没加载完成,这时候连接不会被拒绝,但SSL握手会直接失败,curl不会触发重试逻辑。加上--retry-all-errors参数,让所有请求错误都触发重试即可覆盖这种场景。
  • 概率较低:TLS协议版本不匹配。GitHub Action runner内置的curl版本通常比普通用户本地环境新,新版curl默认禁用了TLS1.0、TLS1.1等老旧协议版本,如果你的服务仅支持老旧TLS版本,握手阶段会直接失败。可以给curl加上-v参数输出完整握手日志,确认是否是协议/加密套件不匹配问题,如果是,添加--tlsv1.2(或你服务支持的对应TLS版本)参数即可。
  • 偶发诱因:端口映射未生效/服务启动异常。可以在执行curl前先运行docker compose ps检查容器运行状态,运行ss -tulpn | grep 8001确认宿主机8001端口确实已经被正常监听,排除端口映射配置错误、服务启动崩溃的问题。
可直接使用的修正配置
- name: Test that the Perseus API stack is up and running with curl
  run: |
    # 前置检查,方便定位问题
    docker compose ps
    ss -tulpn | grep 8001
    # 替换访问地址为127.0.0.1,补全重试参数,增加详细日志输出
    curl -v --retry 10 --retry-all-errors --retry-delay 3 --insecure https://127.0.0.1:8001

内容的提问来源于stack exchange,提问作者Micheal J. Roberts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:51:21