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

GitHub Actions中Docker登录报错tls: unrecognized name的解决咨询

GitHub Actions中Docker登录私有仓库报TLS名称不匹配的解决办法

问题原因

这个错误remote error: tls: unrecognized name本质是TLS握手时,Docker客户端收到的仓库服务器证书中的域名/IP,和你指定的REG_URL不匹配;或者Docker客户端缓存了旧的TLS会话/证书,导致验证失败。本地重启Docker守护进程能解决,是因为重启会清空TLS缓存,但GitHub Actions运行器无法直接重启daemon,需要其他方案。

解决办法

  • 临时关闭TLS验证(仅限内部可信仓库)
    在docker login命令中添加--tls-verify=false参数,跳过证书名称验证:

    - run: echo "$REG_PASS" | docker login -u "$REG_USER" --password-stdin --tls-verify=false "$REG_URL"
    

    注意:此方法仅适用于你完全信任的私有仓库,公网环境不建议使用。

  • 修正仓库地址与证书匹配
    如果是REG_URL和证书中的名称不匹配(比如用IP访问但证书是域名),可以在Actions运行器中添加hosts映射,让域名指向仓库IP:

    # 先添加hosts映射,假设REG_DOMAIN是证书中的域名,REG_IP是仓库IP
    - run: echo "${REG_IP} ${REG_DOMAIN}" | sudo tee -a /etc/hosts
    # 用域名登录,确保和证书名称一致
    - run: echo "$REG_PASS" | docker login -u "$REG_USER" --password-stdin "$REG_DOMAIN"
    
  • 清理Docker TLS缓存
    删除Docker客户端缓存的对应仓库证书,强制重新获取:

    - run: rm -rf ~/.docker/certs.d/${REG_URL} || true
    - run: echo "$REG_PASS" | docker login -u "$REG_USER" --password-stdin "$REG_URL"
    

问题根源判断

这个问题可能来自两个方面:

  • 仓库服务器端:TLS证书的SAN(Subject Alternative Name)字段未包含你使用的REG_URL(比如证书只绑定了域名,但你用IP访问),或者证书配置错误。
  • Docker客户端缓存:GitHub Actions运行器的Docker守护进程缓存了旧的TLS会话或证书,导致验证不通过(本地重启daemon清空缓存后正常,也侧面印证了这一点)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:15:10