更新Docker后无法构建镜像,证书验证失败求助
Docker构建镜像x509证书验证失败问题排查
问题描述
更新Docker后使用新版docker-compose构建镜像时,出现以下证书验证错误,已按公司手册重装证书并重启Docker,问题仍未解决:
[+] Building 0.0s (0/0) [+] Building 0.4s (3/3) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 2.54kB 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 113B 0.0s => ERROR [internal] load metadata for common.dockerhub.{companyDomain}.pl/du/almali 0.3s ------ > [internal] load metadata for common.dockerhub.{companyDomain}.pl/du/almalinux:8: [+] Building 0.0s (0/0) failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to do request: Head "https://common.dockerhub.{companyDomain}.pl/v2/du/almalinux/manifests/8": tls: failed to verify certificate: x509: certificate signed by unknown authority
可能的原因
- 证书路径错误:Docker私有仓库证书需放在
/etc/docker/certs.d/<仓库完整域名>/目录下(Linux系统),如果放错位置,Docker不会读取。 - 证书文件名不符:Docker只识别
ca.crt(根证书)、cert.crt(客户端证书)、key.pem(客户端密钥)这类标准命名的证书文件,文件名不对会导致无法识别。 - 权限不足:证书文件权限设置不当,Docker进程没有读取权限,比如权限设为777或过于严格(如000)。
- 版本更新的配置兼容问题:新版Docker可能调整了证书验证逻辑,之前通过系统CA证书生效的配置不再适用,需改用Docker专属证书目录。
- 域名不匹配:证书颁发的域名与你访问的私有仓库域名不一致,比如证书是给
dockerhub.{companyDomain}.pl的,但实际用的是common.dockerhub.{companyDomain}.pl。 - 证书链不完整:私有仓库证书需要完整的证书链(包含中间证书),只安装根证书会导致验证失败。
查看Docker使用的证书的方法
检查专属证书目录:
针对你的私有仓库域名,查看对应证书目录下的文件:ls -l /etc/docker/certs.d/common.dockerhub.{companyDomain}.pl/确认是否存在
ca.crt等标准命名的证书文件。查看Docker daemon日志:
通过日志排查证书加载情况,不同系统命令不同:# Systemd系统(CentOS、Ubuntu等) journalctl -u docker.service # SysVinit系统 tail -f /var/log/docker.log搜索
certificate或x509关键词,查看是否有证书加载失败的提示。用openssl验证证书有效性:
手动验证证书能否正常访问仓库:openssl s_client -connect common.dockerhub.{companyDomain}.pl:443 -CAfile /path/to/your/ca.crt如果返回
Verify return code: 0 (ok),说明证书有效;否则证书本身或配置存在问题。检查Docker配置文件:
查看daemon.json配置是否影响证书验证:cat /etc/docker/daemon.json确认是否有
insecure-registries等配置干扰了证书验证逻辑。
内容的提问来源于stack exchange,提问作者Zbyszek Kisły
相关产品推荐
相关产品推荐

