login尝试Nexus OSS Docker回购投掷404

我们正在试图在Kubernetes集群中的Nexus OSS(v3.3.2-02)中设置一个Docker存储库,并且遇到login问题。 我们打算为DockerHub(一个私人回购)和一个回购团队build立一个代理,将两者结合在一起,使用以下configuration

托pipe

代理 在这里输入图像说明

在这里输入图像说明

给我们以下列表:

在这里输入图像说明

但是,当我尝试login到存储库时,它似乎试图将我转发到/v2端点,这是抛出一个404错误:

 > docker login -u <user> -p <pass> https://repo.myhost.com:443 Error response from daemon: login attempt to https://repo.myhost.com:443/v2/ failed with status: 404 Not Found 

我想补充一点,我们在同一个实例中设置了Maven和NPM仓库,并且他们正在工作,所以Nexus本身就可以,但是Dockerconfiguration有问题。

我不知道为什么这个请求试图在尝试login时将我发送到/v2端点。我错过了什么?

在刚刚运行的一个实验(docker-machine,virtualbox,macOS)中,当服务器是1.13.1(就像docker cli)时,它从/v2降级到/v1 ,如下所示:

 level=debug msg="Calling GET /_ping" level=debug msg="Calling GET /v1.26/version" level=debug msg="Calling GET /_ping" level=debug msg="Calling GET /v1.26/version" level=debug msg="Calling GET /_ping" level=debug msg="Calling GET /v1.26/info" level=debug msg="Calling POST /v1.26/auth" level=debug msg="attempting v2 login to registry endpoint https://192.168.2.103:9999/v2/" level=info msg="Error logging in to v2 endpoint, trying next endpoint: Get https://192.168.2.103:9999/v2/: EOF" level=debug msg="attempting v1 login to registry endpoint https://192.168.2.103:9999/v1/" level=info msg="Error logging in to v1 endpoint, trying next endpoint: Get https://192.168.2.103:9999/v1/users/: dial tcp 192.168.2.103:9999: getsockopt: connection refused" level=error msg="Handler for POST /v1.26/auth returned error: Get https://192.168.2.103:9999/v1/users/: dial tcp 192.168.2.103:9999: getsockopt: connection refused" 

但是在我将服务器升级到17.06.0-ce(仍然是1.13.1 cli)之后,它只尝试/v2然后退出:

 level=debug msg="Calling GET /_ping" level=debug msg="Calling GET /_ping" level=debug msg="Calling GET /v1.30/version" level=debug msg="Calling GET /_ping" level=debug msg="Calling GET /v1.30/info" level=debug msg="Calling POST /v1.30/auth" level=debug msg="attempting v2 login to registry endpoint https://192.168.2.103:9999/v2/" level=info msg="Error logging in to v2 endpoint, trying next endpoint: Get https://192.168.2.103:9999/v2/: tls: oversized record received with length 21584" level=error msg="Handler for POST /v1.30/auth returned error: Get https://192.168.2.103:9999/v2/: tls: oversized record received with length 21584" 

所以答案似乎是要么教导Nexus正确地响应/v2端点(因为它实际上应该已经在做),要么将docker降级到一个版本,该版本会说/v1 api,如果这是你以后的行为

您可以包含一个nginx容器作为反向代理,如此处所述。 请记住,docker客户端需要ssl才能工作并打开所有的nexus端口。 我在这个响应中放置了一个完整的nginxconfiguration