no matching manifestの対処法
冒頭まとめ docker pullやdocker run、Dockerfileのビルドで次のように止まることがあります。 no matching manifest for linux/amd64 in the manifest list entries この場合、まず要求しているプラットフォームと、そのイメージのタグに用意されているプラットフォームを比べます。例のlinux/amd64は「Linux用、x86-64 CPU向け」という要求です。イメージの名前だけでなく、タグも含めて確認してください。 docker buildx imagetools inspect <image>:<tag> 表示されたPlatform:の一覧に要求したものがなければ、そのタグのまま同じプラットフォームを指定し直しても解決しません。対応するタグを選ぶか、利用可能な別のプラットフォームを指定します。自分で配布するイメージなら、そのプラットフォーム向けの版をビルドして公開します。Docker公式の確認コマンドに一覧の表示例があります。 no matching manifest forとは 複数の環境に対応したイメージのタグは、各環境向けのイメージを指す一覧(manifest listまたはOCI image index)を持ちます。Dockerは取得するときに、要求されたOS・CPUアーキテクチャに合う項目を選びます。Dockerのマルチプラットフォームの説明によると、ARM環境とx86-64環境では同じタグから異なる版が選ばれます。 no matching manifest for linux/amd64 in the manifest list entries no match for platform in manifest sha256:<digest>: not found 上は表示されることのある文言の例です。linux/amd64の部分やダイジェストは環境によって変わります。後者はcontainerdの実装にもある文言です。両者とも、対象のタグを参照したうえで、要求するプラットフォームに適合する版を選べなかった場合に調べるエラーです。Dockerやビルドの経路によって表示全体は異なり、二つの文言が連結される場合もあります。 たとえば公式Goイメージの報告では、golang:1.21.5をlinux/arm/v6向けにビルドしようとしてno match for platform in manifest: not foundが出ています。タグがあることと、必要な環境向けの版があることは別です。この報告だけで、現在の同じタグの対応状況までは判断できません。 タグの対応プラットフォームを確認する 失敗したコマンドのイメージ名とタグをそのまま使い、レジストリ上の一覧を調べます。FROMで止まった場合はDockerfileに書かれた基底イメージ、Composeの場合は該当サービスのimageを確認します。 docker buildx imagetools inspect registry.example.com/myapp:1.2 複数の版を持つ場合、出力のManifests:以下にPlatform: linux/amd64やPlatform: linux/arm64などが並びます。出力に要求した版があるかを見ます。タグによっては単一プラットフォームのmanifestを指すため、一覧ではなく単一のmanifestとして表示されます。unknown/unknownの項目は証明情報などの付随データの場合もあるので、それだけを見て実行環境の自動検出が失敗したと判断しないでください。imagetools inspectの出力例で形式を確認できます。 別のタグを候補にするときも、置き換える前にそのタグを同じコマンドで調べます。latestという名前だけでは、必要なCPU向けの版が存在する保証にはなりません。 ...