Container Registry で manifest list invalid エラーが発生するのはなぜですか?
IBM Cloud® Container Registry でマニフェスト・リストまたは OCI イメージ索引をタグ付けしようとすると、マニフェスト・リスト無効エラーが表示されます。CRI0304E The manifest list or OCI index that you are tagging references an image that doesn't exist
IBM Cloud Container Registryで マニフェスト ・リストまたは OCI イメージ索引に タグ付け しようとすると、マニフェスト・リスト無効エラー
CRI0304E The manifest list or OCI index that you are tagging references an image that doesn't exist, see https://cloud.ibm.com/docs/Registry?topic=Registry-troubleshoot-manifest-list-error
が表示されます。
マニフェスト・リストと OCI イメージ索引には異なるイメージへの参照のリストが含まれ、その各イメージは異なるアーキテクチャー向けです。 マニフェスト・リストまたは OCI イメージ索引にタグを付けると、Container Registry は参照イメージをコピーしようとします。 このエラー・メッセージが表示されると、それらの参照イメージの 1 つがレジストリーで見つからなかったことを示します。
SOURCE_IMAGE
この問題を修正する方法を理解するには、マニフェスト・リストまたは OCI イメージ・インデックスで参照されているイメージを次のコマンドで調べる必要があります:
ibmcloud cr manifest-inspect SOURCE_IMAGE
この出力は、次のような出力になります。
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 528,
"digest": "sha256:865b0c35e6da393b8e80b7e3799f777572399a4cff047eb02a81fa6e7a48ed4b",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 538,
"digest": "sha256:1d71e323557502cc78ee6c237331a09b0c33ba59c14e5f683da3b1c6218779cc",
"platform": {
"architecture": "ppc64le",
"os": "linux"
}
}
]
}
この出力を有効にするには、前の出力からのダイジェストを含むイメージが、タグ付けしようとしているマニフェスト・リストまたは OCI 索引と同じリポジトリーに存在している必要があります。 どのイメージが欠落しているかを確認するには、以下のコマンドを実行します。 SRC_REPO
を、mynamespace/myrepo
という形式の名前空間とリポジトリーの名前に置き換えます。
ibmcloud cr digests --restrict SRC_REPO
例えば、以下のコマンドを実行するとします。
ibmcloud cr digests --restrict mynamespace/myrepo
以下の応答を受け取ります。
Listing images...
Repository Digest Tags Type Created Size Security status
icr.io/mynamespace/myrepo sha256:865b0c35e6da393b8e80b7e3799f777572399a4cff047eb02a81fa6e7a48ed4b - Docker Image Manifest V2, Schema 2 4 days ago 1.8 MB -
icr.io/mynamespace/myrepo sha256:a08e18417cec86f570be496b8bde1350dd986fc354d091b44d6a536570c26193 list Docker Manifest List - 433 B -
OK
前の例では、1 つのイメージのみがマニフェスト・リスト sha256:865b0c35e6da393b8e80b7e3799f777572399a4cff047eb02a81fa6e7a48ed4b
と同じリポジトリーにあることがわかります。そのため、マニフェスト・リストは別のイメージ sha256:1d71e323557502cc78ee6c237331a09b0c33ba59c14e5f683da3b1c6218779cc
を参照していますが、これは現在リポジトリーにはありません。
この問題は、前の例で示した以下のオプションのいずれかを使用して解決できます。
-
欠落しているイメージがレジストリー内の別の場所にある場合は、
ibmcloud cr image-tag
コマンドを使用して、イメージを同じリポジトリーに移動します。-
見つからないダイジェストがレジストリの他の場所に存在するかどうかを調べるには、以下のコマンドを実行する。
ibmcloud cr digests --format '{{if eq .Digest "sha256:1d71e323557502cc78ee6c237331a09b0c33ba59c14e5f683da3b1c6218779cc"}}{{.Repository}}@{{.Digest}}{{end}}' icr.io/myrepo2/image2@sha256:1d71e323557502cc78ee6c237331a09b0c33ba59c14e5f683da3b1c6218779cc
-
前のコマンドがイメージを返した場合、マニフェスト・リストと同じリポジトリにコピーできます。
ibmcloud cr image-tag icr.io/mynamespace/myrepo2@sha256:1d71e323557502cc78ee6c237331a09b0c33ba59c14e5f683da3b1c6218779cc icr.io/mynamespace/myrepo:ppc64le
-
-
欠落しているイメージが過去 30 日間に削除された場合でも、ごみ箱からリストアできます。
-
以下のコマンドを実行して、画像がゴミ箱に存在するかどうかを検出する。
ibmcloud cr trash-list --restrict mynamespace
以下の応答を受け取ります。
Listing the contents of the trash... Digest Days until expiry Tags icr.io/mynamespace/myrepo@sha256:1d71e323557502cc78ee6c237331a09b0c33ba59c14e5f683da3b1c6218779cc 30 ppc64le OK
-
イメージがゴミ箱に存在する場合は、以下のコマンドを実行して復元できます。
ibmcloud cr image-restore icr.io/mynamespacemyrepo@sha256:1d71e323557502cc78ee6c237331a09b0c33ba59c14e5f683da3b1c6218779cc
以下の応答を受け取ります。
Restoring digest 'icr.io/mynamespace/myrepo@sha256:1d71e323557502cc78ee6c237331a09b0c33ba59c14e5f683da3b1c6218779cc' ... Successfully restored digest 'icr.io/mynamespace/myrepo@sha256:1d71e323557502cc78ee6c237331a09b0c33ba59c14e5f683da3b1c6218779cc' Successfully restored tags: ppc64le OK
-
-
イメージのローカル・コピーがある場合は、そのイメージをレジストリーにプッシュして戻すことができます。 詳細については、Docker イメージの名前空間へのプッシュを参照してください。