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

Docker登录私有镜像仓库报x509证书无有效名称匹配myregistry.lk故障

问题根因

你遇到的x509: certificate is not valid for any names, but wanted to match myregistry.lk报错,核心原因是生成自签名证书时未将myregistry.lk加入**使用者可选名称(SAN,Subject Alternative Name)**字段。Docker 20.10及以上版本不再支持仅通过证书Common Name字段校验域名归属,必须匹配SAN字段才会判定证书有效。
仓库所在节点可正常登录,大概率是该节点Docker配置了insecure-registries参数跳过了证书校验,其余节点未配置该参数因此触发了严格的证书校验规则。

解决步骤
  • 第一步:重新生成带SAN字段的自签名证书
    先创建证书配置文件san.conf,可根据实际业务场景修改配置项:
    [req]
    default_bits = 2048
    prompt = no
    default_md = sha256
    distinguished_name = dn
    x509_extensions = v3_req
    
    [dn]
    C = CN
    ST = Beijing
    L = Beijing
    O = MyOrg
    OU = MyTeam
    CN = myregistry.lk
    
    [v3_req]
    subjectAltName = @alt_names
    extendedKeyUsage = serverAuth
    
    [alt_names]
    DNS.1 = myregistry.lk
    # 若需通过IP访问仓库,可追加配置:IP.1 = 仓库节点实际IP
    
    执行命令生成有效期10年的证书和密钥文件:
    openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout registry.key -out registry.crt -config san.conf
    
  • 第二步:替换私有仓库服务使用的旧证书、密钥文件,重启仓库服务使配置生效
  • 第三步:将新生成的registry.crt分发到所有访问节点,覆盖原有证书文件:
    cp registry.crt /etc/docker/certs.d/myregistry.lk:5000/ca.crt
    # 确保证书文件权限正常
    chmod 644 /etc/docker/certs.d/myregistry.lk:5000/ca.crt
    
  • 第四步:重启节点Docker服务加载新的证书配置:
    systemctl restart docker
    
校验方法

执行以下命令验证证书SAN配置是否正确:

openssl x509 -in registry.crt -text -noout | grep -A 10 "Subject Alternative Name"

输出结果包含DNS:myregistry.lk即为配置正确,此时执行docker login myregistry.lk:5000即可正常登录。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:39:03