テクノロジー · 実用ガイド

Docker pull の manifest unknown?削除前に remote reference を証明する

展開済み registry、repository、tag または digest を保存し、remote descriptor と認証 view を確認します。

Docker registry reference の監査図
オリジナル編集イラスト:正確な registry、repository、tag を検証します。 Watch at Ease

manifest unknown は local cache の一般エラーではなく、registry が name/tag を見つけられない応答です。

reference、descriptor、platform、runtime を分けて確認します。

展開済み reference を保存

完全なエラーと、実際に実行されたコマンド、Compose サービス、またはデプロイ項目を保存します。registry、namespace、repository、tag または digest を記録し、変更前に CI 変数を出力します。

最初に image を prune したり builder cache を消したりしないでください。MANIFEST_UNKNOWN は要求したリモート名と tag に対する registry の応答であり、ローカル layer を削除してもリモート manifest は作られません。

short name の default を解決

reference を registry、repository path、image name、tag の四つに分けます。tag を省略すると通常 latest が要求されますが、repository が存在しても latest が公開されているとは限りません。

大文字小文字、区切り文字、CI の展開結果を一文字ずつ比較します。login や別 tag の成功は一部の内容へのアクセスを示すだけで、この reference の存在は証明しません。

pull 前に descriptor を照会

registry UI または認証済みの manifest inspection コマンドで正確な tag を調べ、返された digest と media type を記録します。tag がなければ、実在する不変 tag を選ぶか publisher を修正します。

digest が固定されている場合は、その digest を直接照会します。tag は移動できますが digest は内容で決まるため、別々に検査し、失敗した reference を記録に残します。

tag と platform を分離

tag が image index に解決される場合、必要な OS と architecture の descriptor を確認します。tag は存在するが platform がない状態は、name/tag の MANIFEST_UNKNOWN とは別の分岐です。

amd64 が成功したから arm64 や Windows も存在すると仮定しないでください。workload に合う場合だけ、variant の公開、対応 tag の選択、または target platform の変更を行います。

CI と mirror の view を比較

対話環境では成功し CI だけ失敗する場合、展開済み文字列、資格情報、registry hostname、proxy、network path を比較します。mirror や pull-through cache は origin と異なる view を持つことがあります。

最後に、失敗したものと同じ runtime と registry path から正確な tag または digest が解決できることを証明します。descriptor digest と platform を記録し、再現性が必要なら不変 reference を固定します。

Docker descriptor と platform の監査図
オリジナル編集イラスト:tag の検索と platform の選択を分離します。 Watch at Ease