Docker CE не сохраняет порт при получении токена Docker

При подключении к нашему личному реестру Docker от клиентов запросы, для которых требуется токен, перенаправляются на /v2/token приобрести токен. Проблема в том, что эти запросы не учитывают порт, который прослушивает реестр докеров, а вместо этого подключаются к 443 вместо 5000:

172.0.0.1 - - [19/Jun/2018:14:33:19 +1000] (docker-registry.example.com:5000 -> 127.0.0.1:5001) "GET /v2/ HTTP/1.1" 401 113 "-" "docker/18.03.0-ce go/go1.9.4 git-commit/0520e24 kernel/3.10.0-693.17.1.el7.x86_64 os/linux arch/amd64 UpstreamClient(Docker-Client/18.03.0-ce \x5C(linux\x5C))" "-"
172.0.0.1 - - [19/Jun/2018:14:33:19 +1000] (docker-registry.example.com:443 -> 127.0.0.1:8081) "GET /v2/token?scope=repository%3Acentos%3Apush%2Cpull&service=https%3A%2F%2Fdocker-registry.example.com%2Fv2%2Ftoken HTTP/1.1" 404 2013 "-" "docker/18.03.0-ce go/go1.9.4 git-commit/0520e24 kernel/3.10.0-693.17.1.el7.x86_64 os/linux arch/amd64 UpstreamClient(Docker-Client/18.03.0-ce \x5C(linux\x5C))" "-"
172.0.0.1 - - [19/Jun/2018:14:33:19 +1000] (docker-registry.example.com:443 -> 127.0.0.1:8081) "GET /v2/token?scope=repository%3Acentos%3Apush%2Cpull&service=https%3A%2F%2Fdocker-registry.example.com%2Fv2%2Ftoken HTTP/1.1" 404 2013 "-" "docker/18.03.0-ce go/go1.9.4 git-commit/0520e24 kernel/3.10.0-693.17.1.el7.x86_64 os/linux arch/amd64 UpstreamClient(Docker-Client/18.03.0-ce \x5C(linux\x5C))" "-"

Подключение к этому адресу вручную через curl успешно, как и ожидалось:

172.0.0.1 - - [19/Jun/2018:14:34:17 +1000] (docker-registry.example.com:5000 -> 127.0.0.1:5001) "GET /v2/token?scope=repository%3Acentos%3Apush%2Cpull&service=https%3A%2F%2Fdocker-registry.example.com%2Fv2%2Ftoken HTTP/1.1" 200 60 "-" "curl/7.29.0" "-"

Наша сетевая настройка такова:

                                         +---------------+
                                    +---->     Nexus     |
+--------+         +---------+      |    +---------------+
|        |         |         |      |
| Client +--------->  Nginx  +------+
|        |         |         |      |
+--------+         +---------+      |    +---------------+
                                    +---->Docker registry|
                                         +---------------+

С сопоставлениями обратного прокси:

  • Nexus: 0.0.0.0:443 -> localhost:8081
  • Реестр Docker: 0.0.0.0:5000 -> localhost:5051

Наш конфиг nginx:

upstream docker {
    server 127.0.0.1:5001;
}

server {
    listen 5000 ssl;
    server_name docker-registry.example.com;

    ssl_certificate /etc/nginx/ssl/docker_nexus.crt;
    ssl_certificate_key /etc/nginx/ssl/docker_nexus.key;

    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://docker;
    }
}

upstream nexus {
    server 127.0.0.1:8081;
}

server {
    listen 443 ssl;
    server_name docker-registry.example.com;

    ssl_certificate /etc/nginx/ssl/docker_nexus.crt;
    ssl_certificate_key /etc/nginx/ssl/docker_nexus.key;

    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://nexus;
    }
}

Это ожидаемое поведение или в нашей конфигурации есть ошибка, которую мы пропустили?

0 ответов

Другие вопросы по тегам