Docker の manifest unknown エラー:原因と解決策
冒頭まとめ manifest unknown は、レジストリとの通信自体は成立しているのに、指定した image reference(タグまたはダイジェスト)に対応する manifest がそのリポジトリで解決できなかったときに出るエラーです。OCI Distribution Specification では、リポジトリに blob または manifest が見つからない場合の応答は 404 Not Found と定められており、この系統のエラーは「サーバーが壊れている」ではなく「参照先が存在するか」を疑うところから始めます(OCI Distribution Specification)。 調査は次の3点を順に確認するのが最短です。 指定したタグまたはダイジェストが、そのリポジトリに実在するか image reference の各要素(レジストリホスト、名前空間、リポジトリ名、タグ、プラットフォーム)が意図したものになっているか 直前の build・tag・push、マルチアーキテクチャの manifest 公開が本当に完了しているか エラーの概要 manifest unknown は、レジストリが「そのリポジトリに、要求された manifest がない」と応答している状態です。名前解決や TLS の失敗とは違い、リクエストはレジストリまで届いています。認証エラーとも異なり、レジストリはリクエストを受け付けたうえで「該当なし」を返しています。 近いエラーとの違いを整理すると、次のように分類できます。 出力の傾向 意味するもの 最初に見る場所 manifest unknown(manifest が見つからない) 参照先のタグ・ダイジェストが存在しない image reference とタグ一覧 denied / unauthorized などの権限系の文言 認証・認可が足りない、または対象が非公開 ログイン状態とアクセス権 接続タイムアウト、名前解決失敗、証明書エラー レジストリまで到達できていない ネットワーク、プロキシ、TLS 設定 500・502・503・504 レジストリ側の障害 レジストリの稼働状況 なお、非公開リポジトリに対して存在を隠すために「見つからない」相当の応答を返すレジストリもあります。権限系と参照先不在の切り分けで迷う場合は、対象レジストリの公式ドキュメントで応答の仕様を確認してください。 本記事が扱う範囲は、docker pull や docker push の時点で発生する、レジストリ上の manifest 解決失敗です。認証・認可エラー、レジストリへの到達性そのものの問題、および Kubernetes の Pod sandbox 作成段階のイベント(FailedCreatePodSandbox など)は、発生する層が異なるため本記事の対象外とします。 ...