无法在 Docker Swarm 中使用 Nexus Docker Registry

无法在 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

我还确认这不是代理问题,因为我直接点击了暴露的端口并得到了与上述相同的结果。

答案1

显然,这是自 2017 年 3 月以来 Nexus 3.2.0 中的一个错误(所以它已经有一年多了)https://issues.sonatype.org/browse/NEXUS-12684我想我们需要找到一个支持 Docker 的替代存储库系统。

或者作为暂时的解决方法,我创建了一个简单的代理服务器,允许构建不正确的服务器支持请求HEADhttps://hub.docker.com/r/trajano/fakehead/

相关内容