Docker
無法在 Docker Swarm 中使用 Nexus Docker Registry
我正在嘗試設置一個 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/