Gitlab-ci使用HTTPS推送到私有注册表的问题

时间:2020-11-11 15:48:10

标签: gitlab-ci gitlab-ci-runner

我正在尝试使用gitlab ci将映像推送到我的注册表。我可以顺利登录(之前的脚本)。但是我在push命令上收到以下错误。 error parsing HTTP 400 response body: invalid character '<' looking for beginning of value: "<html>\r\n<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n<center>The plain HTTP request was sent to HTTPS port</center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n"

这是来自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 omnibus注册表配置

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"
}

有人可以帮助我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

好的,解决方案非常简单。我只需要更改

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

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