Gitlab ci使用HTTPS推送到私有注册表时出现问题



我正试图用gitlab ci将图像推送到我的注册表中。我可以毫无问题地登录(之前的脚本(。然而,我在push命令上得到了以下错误。error parsing HTTP 400 response body: invalid character '<' looking for beginning of value: "<html>rn<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>rn<body>rn<center><h1>400 Bad Request</h1></center>rn<center>The plain HTTP request was sent to HTTPS port</center>rn<hr><center>nginx</center>rn</body>rn</html>rn"

这在使用过的gitlab runner 的config.toml中

[[runners]]
name = "e736f9d48a40"
url = "https://gitlab.domain.com/"
token = "token"
executor = "docker"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
tls_verify = false
image = "docker"
privileged = true
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0

这是gitlab ci 的相关部分

image: docker

services:
- docker:dind
variables:
BACKEND_PROJECT: "test"
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
containerize:
stage: containerize
before_script:
- "docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY"
only:
- master
script:
- "cd backend/"
- "docker build -t $CI_REGISTRY_IMAGE/api:latest ."
- "docker push $CI_REGISTRY_IMAGE/api:latest"

GitLab综合注册表配置

registry_external_url 'https://gitlab.domain.com:5050'
registry_nginx['enable'] = true
registry_nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.domain.com/privkey.pem"
registry_nginx['ssl_certificate'] = "/etc/letsencrypt/live/gitlab.domain.com/fullchain.pem"
registry_nginx['port'] = 443
registry_nginx['redirect_http_to_https'] = true
### Settings used by Registry application
registry['enable'] = true

registry_nginx['proxy_set_headers'] = {
"Host" => "$http_host",
"X-Real-IP" => "$remote_addr",
"X-Forwarded-For" => "$proxy_add_x_forwarded_for",
"X-Forwarded-Proto" => "http",
"X-Forwarded-Ssl" => "on"
}

有人能帮我解决这个问题吗?

好吧,解决方案很简单。我只需要更改

"X-Forwarded-Proto" => "http",

"X-Forwarded-Proto" => "https",

最新更新