AWS ECR pull-through-cache извлечение изображения через HTTP-запрос к реестру

AWS ECR pull-through-cache извлечение изображения через HTTP-запрос к реестру

Я настроил сквозной кэш AWS ECR для реестра Docker Hub.

Допустим, он доступен по адресу: 123.dkr.ecr.eu-central-1.amazonaws.com/docker.

Теперь после аутентификации с помощью: aws ecr get-login-password ... | docker login 123.dkr.ecr.eu-central-1.amazonaws.com -u AWS --password-stdinя могу сделать что-то вроде docker pull 123.dkr.ecr.eu-central-1.amazonaws.com/docker/library/busybox:latest.

Все это имеет смысл, но у меня вопрос: как это работает изнутри, ведь если я делаю HTTP-запрос с помощью:

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

я получил {"errors":[{"code":"MANIFEST_UNKNOWN","message":"Requested image not found"}]}

или, если быть точнее, в первый раз я получаю ошибку, но после вызова docker pull(и я вижу, что изображение было кэшировано в ECR) оно начинает работать.

я прочелhttps://github.com/opencontainers/distribution-spec/blob/v1.0.1/spec.mdи все еще не понимаю этого. Что делает официальный клиент docker, что отличается от моего HTTP-запроса, который заставляет ECR фактически извлечь образ и начать его кэшировать? Связано ли это с аутентификацией docker - но как сигнализирует, dockerкакой именно тег он запросит позже?

Потому что после кэширования обычный протокол, похоже, работает (я на самом деле не загружал все BLOB-объекты, но, по крайней мере, manifests возвращает правильный ответ - HTTP 200 с layers). Но, как уже упоминалось, запрос того же URL в первый раз возвращает HTTP 404. И я также пробовал немного подождать - безуспешно, мой запрос, похоже, так и не запускает процесс загрузки изображения ECR, несмотря на попытки добавить заголовки User-Agent, изменить HTTP-запросы на HEAD и т. д. и т. п.

Связанный контент