
Docker Hub 레지스트리에 대해 AWS ECR 풀스루 캐시를 설정했습니다.
다음에서 사용할 수 있다고 가정합니다 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아직도 이것을 이해하지 못합니다. ECR이 실제로 이미지를 가져와 캐싱을 시작하도록 강제하는 HTTP 요청과 다른 공식 도커 클라이언트는 무엇을 수행합니까? 도커 인증과 관련이 있습니까? 하지만 docker
나중에 요청할 태그가 정확히 무엇인지 어떻게 알릴 수 있습니까?
캐시된 후에는 일반 프로토콜이 작동하는 것처럼 보이기 때문입니다(실제로 모든 blob을 다운로드하지는 않았지만 최소한 매니페스트는 적절한 응답(HTTP 200 with )을 반환합니다 layers
). 그러나 앞서 언급했듯이 처음에 동일한 URL을 요청하면 HTTP 404가 반환됩니다. 또한 조금 기다리려고 했습니다. 운이 좋지 않았습니다. User-Agent를 추가하려고 해도 내 요청이 이미지를 다운로드하는 ECR 프로세스를 시작하지 않는 것 같습니다. 헤더, HTTP 요청을 HEAD로 변경 등