簡體   English   中英

登錄嘗試 Nexus OSS Docker 存儲庫拋出 404

[英]Login attempts to Nexus OSS Docker repo throwing 404

我們正在嘗試在 Kubernetes 集群中的 Nexus OSS (v3.3.2-02) 中設置 Docker 存儲庫,但在登錄時遇到問題。 我們打算使用以下配置為 DockerHub 設置一個代理、一個私有存儲庫和一個組存儲庫以將兩者聯系在一起

托管

代理在此處輸入圖片說明

集團在此處輸入圖片說明

給我們以下清單:

在此處輸入圖片說明

但是當我嘗試登錄存儲庫時,它似乎試圖將我轉發到/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 需要非常具體的 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 總是一個好主意。

在我剛剛運行的一個實驗中(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 的版本,如果這是你所追求的行為

不確定這是否會有所幫助,但基於瀏覽器的 URL 中沒有端口號,並且可以使用我的憑據登錄。 下面是基於瀏覽器的示例 URL。

https://nexus.mysite.net/

但是我必須輸入以下內容

碼頭工人登錄 -u -p https://nexus.mysite.net/

我受到以下歡迎

來自守護程序的錯誤響應:登錄嘗試https://nexus.mysite.net/v2/失敗,狀態為:404 Not Found

提供正確的端口號並沒有顯示上述錯誤,我可以從 CLI 登錄,如下所示。

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

(在我的情況下,正確的端口號是 7000)。

希望這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM