
Configuré una caché de extracción de AWS ECR para el registro de Docker Hub.
Di que está disponible en: 123.dkr.ecr.eu-central-1.amazonaws.com/docker
.
Ahora, después de autenticarme usando:
aws ecr get-login-password ... | docker login 123.dkr.ecr.eu-central-1.amazonaws.com -u AWS --password-stdin
puedo hacer algo como docker pull 123.dkr.ecr.eu-central-1.amazonaws.com/docker/library/busybox:latest
.
Todo esto tiene sentido, pero mi pregunta es cómo funciona esto internamente, porque si hago una solicitud 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
yo obtengo
{"errors":[{"code":"MANIFEST_UNKNOWN","message":"Requested image not found"}]}
o para ser más preciso, la primera vez que aparece un error pero después de invocarlo docker pull
(y puedo ver que la imagen se almacenó en caché en ECR) comienza a funcionar.
he leídohttps://github.com/opencontainers/distribution-spec/blob/v1.0.1/spec.mdy todavía no entiendo esto. ¿Qué hace el cliente oficial de Docker que sea diferente de mi solicitud HTTP que obliga a ECR a extraer la imagen y comenzar a almacenarla en caché? ¿Está relacionado con la autenticación de Docker, pero cómo docker
indica exactamente qué etiqueta solicitará más adelante?
Porque después de almacenarlo en caché, el protocolo normal parece funcionar (en realidad no descargué todos los blobs, pero al menos los manifiestos devuelven una respuesta adecuada: HTTP 200 con layers
). Pero como mencioné, solo solicitar la misma URL la primera vez devuelve HTTP 404. Y también intenté esperar un poco; no tuve suerte, mi solicitud parece no iniciar nunca el proceso de descarga de la imagen de ECR, a pesar de intentar agregar User-Agent. encabezados, cambiar solicitudes HTTP a HEAD, etc., etc.