
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 クライアントの動作は何ですか? これは Docker 認証に関連していますか? しかし、docker
後で要求するタグを正確にどのように通知するのですか?
キャッシュされた後は、通常のプロトコルが機能しているように見えるためです (実際にはすべての BLOB をダウンロードしたわけではありませんが、少なくともマニフェストは適切な応答 (HTTP 200 と ) を返しますlayers
)。ただし、前述のように、最初に同じ URL をリクエストすると、HTTP 404 が返されます。また、少し待つことも試みましたが、うまくいきませんでした。User-Agent ヘッダーを追加したり、HTTP リクエストを HEAD に変更したりしたにもかかわらず、私のリクエストでは、ECR によるイメージのダウンロード プロセスが開始されないようです。