Вход в докер не работает с частным реестром Nexus 3

Nexus UI Config

Я использую Nexus Repository Manager OSS 3.0.1-01 на виртуальной машине Linux. На этой виртуальной машине у меня работает nginx, чтобы зарезервировать http-запросы прокси как https. Мой ключ SSL подписан доверенным центром сертификации. Я создал хранилище maven, которое работает без проблем всякий раз, когда на нем публикуется клиентский компьютер.

Также на этом клиентском компьютере, когда я использую свой докер-клиент и делаю вход в докер. Я получаю все виды ошибок.

Я следую этим инструкциям https://books.sonatype.com/nexus-book/3.0/reference/docker.html частности, раздел 9.2, и, честно говоря, последние 2 дня я потратил никуда.

Я прочитал все, что упомянуто здесь: Проблемы с подключением к реестру Docker, хранящемуся в Nexus 3 Preview на Azure VM, но эта настройка, которую объясняет пользователь, смущает меня.

Для настройки мы пытаемся достичь небезопасных настроек, добавив --insecure-registry в /etc/default/docker файл, просто не вариант.

Я пытался следовать нескольким учебникам, чтобы понять внутреннюю работу реестра докеров, но мне не удалось собрать его воедино. Я смотрел на это в определенной степени: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-private-docker-registry-on-ubuntu-14-04

Я использовал дополнительные ответы в stackru, чтобы помочь мне устранить неполадки в искаженном ответе HTTP с помощью частного реестра Docker (v2) за прокси-сервером nginx.

Но, честно говоря, я не могу сказать, что нашел что-то, что сделало понимание этого прямым. NGINX не сообщает ни о каких ошибках /var/log/nginx/errors.logжурналы доступа выглядят как обычные "GETS", каждый раз, когда я пытаюсь войти в докер. Докер входит в систему /var/log/upstart/docker.log Сообщите о тех же самых ошибках, которые я иллюстрирую ниже с ошибками 404. Также следил за этой проблемой на github, чтобы увидеть, была ли это какая-то помощь github com/docker/docker/ Issues/8410 . Любая помощь, которая поможет мне выполнить успешную регистрацию в Docker для этого частного репозитория Nexus 3, будет удивительной.

Теперь, может быть, я немного запутался со всем, что я читал, чтобы заставить мой докер-клиент успешно работать с этим репозиторием Nexus, но нужно ли мне устанавливать репозиторий Docker (группу), и это является источником моей проблемы? Или это нормально для меня, чтобы просто иметь Docker (размещенный) репо. Потому что на данный момент у меня есть только Docker (размещенный) репо. Документация Nexus не создала у меня впечатления, что групповое репо также необходимо, чтобы заставить вещи работать.

И последнее, но не менее важное: я надеюсь, что мой вопрос достаточно конкретен, и я надеюсь, что вы, ребята, видите, что я приложил некоторые усилия. Я действительно пытался!

Когда я вхожу в систему, я использую локального администратора с паролем администратора по умолчанию. Сначала позвольте мне представить вопросы:

Если я пытаюсь без порта, я получаю следующее -

root:~# docker login box.company.net
Error response from daemon: Login:
<!DOCTYPE html>
<html>
<head>
  <title>404 - Nexus Repository Manager</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

С портом HTTP 4444 я получаю следующее

root:~# docker login box.company.net:4444
Error response from daemon: Get https://box.company.net:4444/v1/users/: `http: server gave HTTP response to HTTPS client`

Если я добавлю HTTPS в Nexus UI к 4445, то я запускаю

root:~# docker login box.company.net:4445
Error response from daemon: Get https://box.company.net:4445/v1/users/: dial tcp x.x.x.x:4445: getsockopt: connection refused

Вот информация о моей среде:

#cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"

# uname -r
3.19.0-65-generic

# nginx -v
nginx version: nginx/1.4.6 (Ubuntu)

~# docker version
Client:
 Version:      1.12.1
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   23cf638
 Built:        Thu Aug 18 05:22:43 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.1
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   23cf638
 Built:        Thu Aug 18 05:22:43 2016
 OS/Arch:      linux/amd64

cat /etc/nginx/conf.d/site.conf

server {

    proxy_send_timeout 120;
    proxy_read_timeout 300;
    proxy_buffering    off;
    tcp_nodelay        on;

    server_tokens off;
    client_max_body_size 1G;

    listen 80;
    server_name box.company.net;
    location / {
          rewrite ^(.*) https://box.company.net$1 permanent;
    }
}

server {
    listen 443;
    server_name box.company.net;
    keepalive_timeout 60;
    ssl on;
    ssl_certificate /etc/nginx/conf.d/net.crt;
    ssl_certificate_key /etc/nginx/conf.d/net.key;
    ssl_ciphers HIGH:!kEDH:!ADH:!MD5:@STRENGTH;
    ssl_session_cache shared:TLSSSL:16m;
    ssl_session_timeout 10m;
    ssl_prefer_server_ciphers on;

    location / {

      proxy_set_header        Host $http_host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto "https";
      proxy_pass              http://x.x.x.x:8081;
      proxy_read_timeout      90;

    }
}

вот некоторые основные результаты скручивания для получения дополнительной информации, если это поможет вообще.

 root:~# curl -v https://box.company.net
* Rebuilt URL to: https://box.company.net
* Hostname was NOT found in DNS cache
*   Trying x.x.x.x...
* Connected to box.company.net (x.x.x.x) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server key exchange (12):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using ECDHE-RSA-AES256-GCM-SHA384
* Server certificate:
*        subject: OU=Domain Control Validated; CN=*.company.net
*        start date: 2016-04-01 14:01:38 GMT
*        expire date: 2018-04-14 15:15:04 GMT
*        subjectAltName: box.company.net matched
*        issuer: C=US; ST=Arizona; L=Scottsdale; O=GoDaddy.com, Inc.; OU=http://certs.godaddy.com/repository/; CN=Go Daddy Secure Certificate Authority - G2
*        SSL certificate verify ok.
> GET / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: box.company.net
> Accept: */*
>
< HTTP/1.1 200 OK
* Server nginx/1.4.6 (Ubuntu) is not blacklisted
< Server: nginx/1.4.6 (Ubuntu)
< Date: Thu, 25 Aug 2016 13:39:14 GMT
< Content-Type: text/html
< Content-Length: 5077
< Connection: keep-alive
< X-Frame-Options: SAMEORIGIN
< X-Content-Type-Options: nosniff
< Last-Modified: Thu, 25 Aug 2016 13:39:14 GMT
< Pragma: no-cache
< Cache-Control: post-check=0, pre-check=0
< Expires: 0

Любая помощь в получении доступа к докеру private.registry.net будет очень полезна, спасибо.

1 ответ

Решение

Мне пришлось добавить дополнительную (серверную) запись в моей конфигурации nginx, прямо под предыдущей записью

перезапустите nginx

Docker клиент, подключится к порту 6666, nginx перенаправит трафик на порт 4444, который

# correlates to your nexus http connector
server {
    listen 6666;
    server_name box.company.net;
    keepalive_timeout 60;
    ssl on;
    ssl_certificate /etc/nginx/conf.d/net.crt;
    ssl_certificate_key /etc/nginx/conf.d/net.key;
    ssl_ciphers HIGH:!kEDH:!ADH:!MD5:@STRENGTH;
    ssl_session_cache shared:TLSSSL:16m;
    ssl_session_timeout 10m;
    ssl_prefer_server_ciphers on;
    client_max_body_size 1G;
    chunked_transfer_encoding on;

    location / {

      access_log              /var/log/nginx/docker.log;
      proxy_set_header        Host $http_host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto "https";
      proxy_pass              http://x.x.x.x:4444;
      proxy_read_timeout      90;

    }
}

тогда я мог бы сделать

docker login -u username -p password box.company.net:6666
docker pull box.company.net:6666/docker-image:tag
docker push box.company.net:6666/docker-image:tag
Другие вопросы по тегам