Estou tentando configurar um repositório Nexus para uso por um Docker Swarm. No entanto, estou vendo algum comportamento estranho e não tenho certeza se é algo que fiz ou se é um bug porque parece estar presente desde o 3.12 (essa é a primeira versão que tinha o armazenamento de blob do S3, então essa foi a primeira vez Eu usei o Nexus)
O comportamento que estou vendo docker pull
funciona, mas quando faço docker swarm deploy
isso, diz que a imagem não pôde ser acessada. Não tenho problema com a registry:2
imagem.
Aqui está a saída da docker pull
qual mostra que está funcionando com sucesso. Isso também significa que eu autentiquei corretamente.
$ 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
O docker-compose.yml
arquivo usado para implantação é
version: '3.4'
services:
apidoc:
image: repo.devhaus.com/mylj-api
No entanto, quando tentei implantar, obtive
$ 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.
Eu também tentei dar aos usuários nx-admin
direitos que eles realmente não deveriam porque tudo o que eles precisam fazer é ler do repositório, não escrever.
A /var/log/messages
seguir aparece em docker stack deploy
mas não emdocker 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"
Estou pensando que docker stack deploy
pode estar fazendo um HEAD
pedido.
As seguintes obras:
curl --user XXXX:YYYY https://repo.devhaus.com/v2/mylj-api/manifests/latest
O seguinte, que é basicamente o HEAD
equivalente da solicitação, fornece um 404 :
curl -I --user XXXX:YYYY https://repo.devhaus.com/v2/mylj-api/manifests/latest does not and gives a 404
Também confirmei que não era um problema de proxy, pois atingi a porta exposta diretamente e obtive os mesmos resultados acima.
Aparentemente, é um bug no Nexus desde 3.2.0 desde março de 2017 (portanto, tem mais de um ano) https://issues.sonatype.org/browse/NEXUS-12684 Acho que precisamos encontrar um sistema de repositório alternativo que suporte o Docker .
Ou, como solução alternativa por enquanto, criei um servidor proxy simples que permite que servidores construídos incorretamente ofereçam suporte a uma
HEAD
solicitação. https://hub.docker.com/r/trajano/fakehead/