Nexus UI Config
我在linux虚拟机上运行Nexus Repository Manager OSS 3.0.1-01在那个虚拟机上,我有nginx工作保留代理http请求为https。我的SSL密钥由受信任的CA签名我创建了一个maven存储库,无论何时我有客户端机器发布到它,它都可以正常工作。
同样在这个客户端机器上,当我使用我的docker客户端,并做一个docker登录。我收到各种各样的错误。
我遵循这些指示https://books.sonatype.com/nexus-book/3.0/reference/docker.html#_accessing_repositories特别是第9.2节,老实说,我花了两天时间毫无进展。
我已经阅读了这里提到的所有内容:连接到存储在Azure虚拟机上Nexus 3预览版上的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
中,访问日志看起来像基本的"GETS",每次我尝试docker登录。docker登录/var/log/upstart/docker.log
报告了我下面用404错误说明的相同错误。也跟着这个问题在github上看看是否有任何帮助github com/docker/docker/issues/8410。任何帮助,让我能够执行一个成功的docker登录到这个私人nexus 3的仓库将是惊人的。
现在也许我有点困惑的一切,我一直在阅读让我的docker客户端与这个nexus repo成功地工作,但它是需要我设置一个docker(组)的repo,这是我的问题的来源?或者对我来说,仅仅拥有一个docker(托管)repo是可以的。因为到目前为止,我只有一个docker(托管)repo。Nexus的文档并没有给我留下这样的印象:要想让一切正常工作,还需要一个组的repo。
最后但并非最不重要的是,我希望我的问题足够具体,我希望你们看到我在这里做了一些努力。我真的尽力了!
当我登录时,我使用本地admin用户,使用默认的admin密码。首先让我提出问题:
如果我尝试没有端口,我得到以下——
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;
}
}
这里有一些基本的curl结果,如果这对你有帮助的话。
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登录prive.registry.net将非常有帮助,谢谢。
我必须在我的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