Реестр контейнеров Gitlab за обратным прокси

# #docker #nginx #docker-compose #gitlab #container-registry

Вопрос:

Я нашел много вопросов по StackOverflow с тем же названием, что и этот вопрос.

Но ни один из вопросов или ответов не мог помочь мне решить мою проблему

(Я использую example.com вместо своего собственного домена).

когда я пытаюсь войти в свой реестр вот так:

 docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
 

Я получаю эту ошибку:

 Error response from daemon: Get https://registry.example.com/v2/: denied: access forbidden
 

и если я сверну URL-адрес:

 curl https://registry.example.com/v2/
 

Я получаю этот json в качестве ответа.

 {"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}
 

Я настроил Gitlab с помощью файла docker-compose:

 web:
  image: 'gitlab/gitlab-ee:latest'
  restart: always
  hostname: 'gitlab.example.com'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'http://gitlab.example.com'
      nginx['listen_port'] = 8081
      nginx['listen_https'] = false
      registry_external_url 'https://registry.example.com'
      registry['registry_http_addr'] = "gitlab.example.com:5050"
      registry_nginx['listen_port'] = 5005
      registry_nginx['listen_https'] = false
  ports:
    - '8081:8081'
    - '5050:5005'
    - '22:22'
  volumes:
    - '/home/user/gitlab/config:/etc/gitlab'
    - '/home/user/gitlab/logs:/var/log/gitlab'
    - '/home/user/gitlab/data:/var/opt/gitlab'
 

Я настроил свой NGINX таким образом с помощью (certbot/LetsEncrypt):

 server {
    server_name registry.example.com www.registry.example.com;
    location / {
        proxy_pass http://192.168.0.30:5050;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/registry.example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/registry.example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
    if ($host = www.registry.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = registry.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    server_name registry.example.com www.registry.example.com;
    listen 80;
    return 404; # managed by Certbot
}