我正在尝试设置一个 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/