GitLab CE 15.7配置自签名证书Docker Registry失败求助
问题:GitLab CE 15.7 Docker Registry 自建CA证书认证失败
当前GitLab配置(gitlab.rb)
registry_external_url 'https://198.18.133.100:5000' registry['enable'] = true registry['username'] = "registry" registry['group'] = "registry" registry['registry_http_addr'] = "127.0.0.1:5000" registry['debug_addr'] = "localhost:5001" registry['env'] = { 'SSL_CERT_DIR' => "/etc/gitlab/ssl/" } registry['rootcertbundle'] = "/etc/gitlab/ssl/198.18.133.100.crt"
推送镜像时的错误信息
WARNING! Using --password via the CLI is insecure. Use --password-stdin. Error response from daemon: Get "https://198.18.133.100:5000/v2/": x509: certificate signed by unknown authority Cleaning up project directory and file based variables 00:00 ERROR: Job failed: exit status 1
解决思路
优先解决客户端证书信任问题:
错误核心是Docker客户端(GitLab Runner所在机器的Docker)不识别自建CA。需将自建CA根证书放到Docker信任目录:- Linux系统:创建目录
/etc/docker/certs.d/198.18.133.100:5000/,将CA根证书命名为ca.crt放入该目录,执行systemctl restart docker重启服务。 - Windows/macOS:对应路径为
C:\ProgramData\Docker\certs.d\198.18.133.100:5000\ca.crt或~/Library/Containers/com.docker.docker/Data/database/com.docker.driver.amd64-linux/etc/docker/certs.d/198.18.133.100:5000/ca.crt,放入证书后重启Docker。
- Linux系统:创建目录
检查GitLab侧证书配置:
- 确保
/etc/gitlab/ssl/目录下同时存在服务器证书198.18.133.100.crt和私钥198.18.133.100.key,权限设置为root:root、600。 - 确认
registry['rootcertbundle']指向的是CA根证书,而非仅服务器证书。如果服务器证书已包含完整CA链,可直接使用;否则需单独指定CA根证书路径。
- 确保
验证Registry服务的SSL有效性:
在GitLab服务器本地执行curl --cacert /path/to/your/ca.crt https://127.0.0.1:5000/v2/,若返回空JSON{}说明本地SSL配置正常;若报错,检查证书与私钥是否匹配,并用gitlab-ctl status registry确认Registry服务是否正常运行。GitLab Runner容器化场景的额外配置:
如果Runner是用Docker启动的,需要将CA根证书挂载到Runner容器内的Docker证书目录,或者在Runner的config.toml中添加证书信任相关的挂载配置,确保容器内的Docker客户端能识别自建CA。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

