Imagem de busca pull-through-cache do AWS ECR por meio de solicitação HTTP para registro

Imagem de busca pull-through-cache do AWS ECR por meio de solicitação HTTP para registro

Eu configurei um cache pull-through do AWS ECR para o registro do Docker Hub.

Digamos que esteja disponível em: 123.dkr.ecr.eu-central-1.amazonaws.com/docker.

Agora, depois de autenticar usando: aws ecr get-login-password ... | docker login 123.dkr.ecr.eu-central-1.amazonaws.com -u AWS --password-stdinposso fazer algo como docker pull 123.dkr.ecr.eu-central-1.amazonaws.com/docker/library/busybox:latest.

Tudo isso faz sentido, mas minha pergunta é como isso funciona nos bastidores, porque se eu fizer uma solicitação HTTP usando:

curl -vv -H "Authorization: Basic $(echo -n AWS:$(aws ecr get-login-password ...) | base64 -w 8000)" -v https://123.dkr.ecr.eu-central-1.amazonaws.com/v2/docker/library/busybox/manifests/latest

eu recebo {"errors":[{"code":"MANIFEST_UNKNOWN","message":"Requested image not found"}]}

ou, para ser mais preciso, na primeira vez que recebo um erro, mas depois de invocar docker pull(e posso ver que a imagem foi armazenada em cache no ECR), ele começa a funcionar.

Eu lihttps://github.com/opencontainers/distribution-spec/blob/v1.0.1/spec.mde ainda não entendo isso. O que o cliente docker oficial faz de diferente da minha solicitação HTTP que força o ECR a extrair a imagem e começar a armazená-la em cache? Está relacionado à autenticação do docker - mas como dockersinaliza exatamente qual tag será solicitada posteriormente?

Porque depois de armazenado em cache, o protocolo normal parece funcionar (na verdade, não baixei todos os blobs, mas pelo menos o manifesto retorna uma resposta adequada - HTTP 200 com layers). Mas, como mencionei, apenas solicitar o mesmo URL na primeira vez retorna HTTP 404. E também tentei esperar um pouco - sem sorte, minha solicitação parece nunca iniciar o processo de download da imagem pelo ECR, apesar de tentar adicionar o User-Agent cabeçalhos, alterando solicitações HTTP para HEAD etc.

informação relacionada