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

