全新Debian机器上GitLab Runner连接官方镜像仓库出现x509证书未知颁发机构错误的求助
我来帮你搞定这个头疼的证书问题!你遇到的x509: certificate signed by unknown authority并不是GitLab仓库证书无效,而是你的Debian主机或GitLab Runner容器缺少验证证书所需的根CA文件,而且之前的配置可能没作用到正确的地方——先理清关键误区,再一步步解决:
先纠正配置误区
你在[runners.docker]里设置的tls_verify = false,是用来控制GitLab Runner和Docker守护进程之间的TLS验证的,和拉取镜像仓库的证书完全无关!这就是为啥改了也没用的核心原因之一。
分步解决步骤
1. 给Debian主机补全根证书
全新Debian系统默认可能没装完整的根证书套件,先在主机上执行这两行命令:
sudo apt update && sudo apt install -y ca-certificates sudo update-ca-certificates
这会把所有主流可信CA的证书安装到系统里,Docker和Runner都会用到这些证书。
2. 确保Docker守护进程的配置生效
你已经在/etc/docker/daemon.json加了insecure-registries,但一定要完全重启Docker服务才能让配置生效,别只重启容器:
sudo systemctl stop docker sudo systemctl start docker # 验证配置是否加载成功 docker info | grep -A 5 "Insecure Registries"
如果输出里能看到registry.gitlab.com,说明这个配置已经生效了。
3. 让GitLab Runner容器用上主机的证书
如果你是用Docker方式安装的GitLab Runner,记得启动容器时把主机的根证书挂载进去,这样Runner才能用它验证仓库证书:
启动Runner容器时添加这个挂载参数:
-v /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt
如果是已经在运行的Runner,先停止容器,重新启动时加上这个参数就行。
4. 给Alpine镜像补证书(可选但有用)
你指定的job镜像是alpine:latest,Alpine默认的根证书包也不全,在你的CI脚本开头加两行,先装证书再执行任务:
apk add --no-cache ca-certificates update-ca-certificates
最后验证
先在Debian主机手动拉取个GitLab仓库的镜像测试:
docker pull registry.gitlab.com/gitlab-org/gitlab-runner:latest
如果这一步能成功,再触发CI作业试试,应该就能解决证书错误了。
内容的提问来源于stack exchange,提问作者Vincent Decaux

