Docker

無法在 Docker Swarm 中使用 Nexus Docker Registry

  • October 18, 2018

我正在嘗試設置一個 Nexus 儲存庫以供 Docker Swarm 使用。但是,我看到一些奇怪的行為,我不確定這是我做的事情還是錯誤,因為它似乎自 3.12 以來就存在(這是第一個具有 S3 blob 儲存的版本,所以這是第一次我用過 Nexus)

我看到的行為是docker pull有效的,但是當我這樣做時,docker swarm deploy它說圖像無法訪問。我沒有registry:2圖像的問題。

docker pull這是顯示它成功執行的輸出。這也意味著我已正確驗證。

$ sudo docker pull repo.devhaus.com/mylj-api:latest
latest: Pulling from mylj-api
Digest: sha256:e6ca3333cbe6d8c1761b2af2548610b068e1a268dac437598fb76a5b4102f9eb
Status: Downloaded newer image for repo.devhaus.com/mylj-api:latest

docker-compose.yml用於部署的文件是

version: '3.4'
services:
 apidoc:
    image: repo.devhaus.com/mylj-api

但是,當我嘗試部署時,我得到了

$ sudo docker stack deploy apidoc -c apidoc.yml --with-registry-auth --prune
Updating service apidoc_apidoc (id: odj2sgw8zugthjfk4jom1erms)
image repo.devhaus.com/mylj-api:latest could not be accessed on a registry to record
its digest. Each node will access repo.devhaus.com/mylj-api:latest independently,
possibly leading to different nodes running different
versions of the image.

我還嘗試賦予使用者nx-admin他們真正不應該的權限,因為他們需要做的只是從儲存庫中讀取,而不是寫入。

/var/log/messages以下出現在docker stack deploy但不在docker pull

Oct 17 01:25:59 ip-10-70-1-11 dockerd: time="2018-10-17T01:25:59.853065022Z" level=error msg="Handler for GET /v1.38/distribution/repo.devhaus.com/mylj-api:latest/json returned error: missing or empty Content-Length header"

我在想這docker stack deploy可能是在做一個HEAD請求。

以下作品:

curl --user XXXX:YYYY https://repo.devhaus.com/v2/mylj-api/manifests/latest 

以下基本上是HEAD請求等效項給出了 404 :

curl -I --user XXXX:YYYY https://repo.devhaus.com/v2/mylj-api/manifests/latest does not and gives a 404

我還確認這不是代理問題,因為我直接點擊了暴露的埠並產生了與上述相同的結果。

顯然這是自 2017 年 3 月以來 3.2.0 以來 Nexus 中的一個錯誤(所以它已經有一年多了)https://issues.sonatype.org/browse/NEXUS-12684我想我們需要找到一個支持 Docker 的替代儲存庫系統.

或者暫時作為一種解決方法,我創建了一個簡單的代理伺服器,允許不正確建構的伺服器支持HEAD請求。 https://hub.docker.com/r/trajano/fakehead/

引用自:https://serverfault.com/questions/935857