web-dev-qa-db-ja.com

dockerloginがnexus3プライベートレジストリで機能しない

Nexus UI Config

LinuxでNexusRepository Manager OSS3.0.1-01を実行していますVMそのVMでは、nginxがプロキシhttpリクエストをhttpsとして予約するように機能しています。SSLキーは信頼できるCAによって署名されていますクライアントマシンを公開するたびに問題なく動作するmavenリポジトリを作成しました。

また、このクライアントマシンで、Dockerクライアントを使用し、Dockerログインを実行する場合。あらゆる種類のエラーが発生します。

私はこれらの指示に従っています https://books.sonatype.com/nexus-book/3.0/reference/docker.html#_accessing_repositories 具体的にはセクション9.2で、正直なところ、過去2日間を費やしてどこにも。

ここに記載されているすべてを読みました: AzureVMのNexus3 Previewに保存されているDockerレジストリへの接続の問題 しかし、ユーザーが説明するそのセットアップは私を混乱させます。

--insecure-registryファイルに/etc/default/dockerを追加することで安全でない設定を実現しようとしているセットアップでは、オプションではありません。

Dockerレジストリの内部動作を理解するためだけに複数のチュートリアルを実行しようとしましたが、それをつなぎ合わせることができませんでした。私はこれをある程度フォローすることを検討しました: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-private-docker-registry-on-ubuntu- 14-04

トラブルシューティングに役立てるためにstackoverflowで追加の応答を使用しました nginxプロキシの背後にあるdockerプライベートレジストリ(v2)での不正なHTTP応答

しかし、正直なところ、これを簡単に理解できるものを見つけたとは言えません。 NGINXは/var/log/nginx/errors.logにエラーログを報告していません。Dockerログインを試みるたびに、アクセスログは基本的な「GETS」のように見えます。 Dockerのログイン/var/log/upstart/docker.logは、以下に示す404エラーと同じエラーを報告します。また、githubでこの問題を追跡し、それがgithub com/docker/docker/issues/8410のヘルプであるかどうかを確認しました。このプライベートネクサス3リポジトリへのDockerログインを成功させるための支援は素晴らしいでしょう。

Dockerクライアントをこのネクサスリポジトリで正常に動作させるために読んでいるすべてのものと少し混乱しているかもしれませんが、Docker(グループ)リポジトリをセットアップする必要があり、それが私の問題の原因ですか?それとも、docker(hosted)リポジトリを持っていても大丈夫ですか。今のところ、私はdocker(hosted)リポジトリしか持っていないからです。 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"/>

4444のHTTPポートを使用すると、次のようになります

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`

Nexus UIでHTTPSを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

Docker login private.registry.netを取得するためのヘルプは、非常に役立ちます。

13
Kid Oob

前のエントリのすぐ下に、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
4
Kid Oob