登录尝试Nexus OSS Docker仓库时出现404错误。

8
我们正在尝试在Kubernetes集群中的Nexus OSS(v3.3.2-02)中设置Docker仓库,并且登录时遇到了问题。我们打算设置一个代理来连接DockerHub、私有仓库和组仓库,使用以下配置:
主机: 代理: enter image description here 组: enter image description here 这将给我们以下列表:

enter image description here

但是,当我尝试登录到代码库时,它似乎正在尝试将我转发到一个/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本身没有问题,但是Docker配置有问题。
我不知道为什么这个请求在尝试登录时要将我发送到/v2端点。我错过了什么?

你正在运行哪个版本的Docker? - mdaniel
另外,Nexus 端是否有任何日志消息显示与 Docker 的交互? - mdaniel
先回答第一个问题。这是版本的响应:bash-4.3# docker version 客户端: 版本:17.05.0-ce API 版本:1.24(从1.29降级) Go 版本:go1.8.1 Git 提交:v17.05.0-ce 构建时间:2017年5月16日10:10:04 操作系统/架构:linux/amd64 服务器: 版本:1.12.6 API 版本:1.24(最低版本) Go 版本:go1.7.5 Git 提交:a82d35e 构建时间:2017年7月18日23:18:48 操作系统/架构:linux/amd64 实验性功能:false - TheIcemanCometh
你在运行NXRM的应用程序SSL端口是多少?这不应该与你的docker配置相匹配。如果我将我的服务器运行在8443上并尝试使用8443进行docker登录,我会遇到与你相同的错误。 - joedragons
3个回答

2
Docker需要非常特定的URL布局,并且不允许任何上下文URL,因此需要Docker连接器以允许Docker客户端连接到NXRM。您的屏幕截图显示您已经为端口444上的Docker托管存储库配置了Docker连接器,但是您的终端捕获显示您正在尝试连接到端口443,这不是您的Docker连接器端口。您收到的错误消息表明您的NXRM服务器确实在端口443上运行,但由于Docker的工作方式,您需要使用端口444来访问它。请尝试:docker login -u <user> -p <pass> https://repo.myhost.com:444以便尝试使用您的Docker连接器端口。另外,始终运行最新版本的Nexus是一个好主意。

0

不确定这是否有帮助,但基于浏览器的URL中没有端口号,并且可以使用我的凭据登录。以下是示例浏览器URL。

https://nexus.mysite.net/

然而我必须输入以下内容:

docker login -u -p https://nexus.mysite.net/

然后我会看到以下内容:

Error response from daemon: login attempt to https://nexus.mysite.net/v2/ failed with status: 404 Not Found

正确的端口号可以避免上述错误,并且我可以按照以下方式从CLI登录。

docker login -u the-user-name -p the-password https://nexus.mysite.net:7000

(在我的情况下,正确的端口号是7000)。
希望这能有所帮助。

0
在我刚刚进行的一个实验中(使用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端点(它本来就应该这样做),要么将dockerd降级到一个支持/v1 api的版本,如果你想要这种行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接