背景
Amazon SageMakerでカスタムDockerイメージを使った際,「Unsupported manifest media type
」というエラーが出ました.以下がエラーの全文になります.
Error: creating SageMaker model: operation error SageMaker: CreateModel,
https response error StatusCode: 400, RequestID: ***, api error ValidationException:
Unsupported manifest media type application/vnd.oci.image.manifest.v1+json for image
***.dkr.ecr.ap-northeast-1.amazonaws.com/***. Ensure that valid manifest media type
is used for specified image.
これは,SageMakerが古い Docker V2 Schema 2 フォーマットを要求するのに対し,最近のDocker(特にDocker Desktop)が新しい OCI (Open Container Initiative) Image Format でイメージを作成・管理するためです.
DOCKER_BUILDKIT=0
でも解決しなかった
一般的な対策として DOCKER_BUILDKIT=0
環境変数を設定してビルドしても,Docker Desktop 環境では解決しないケース が報告されています.筆者はこのケースでした.
これは,Docker Desktopの containerd統合 機能が有効な場合,BuildKitを無効化しても最終的にOCIフォーマットになってしまうのではないかと考えています.
解決策 1:Docker Desktop の containerd 統合を無効にする
DOCKER_BUILDKIT=0
が効かない場合の確実な方法は,Docker Desktopの設定で containerd 統合を無効にする ことです.
参考: Docker Forums - Force image to use manifest media type docker v2 schema 2 instead of oci? (jmenga Justin Menga 氏のコメント)
手順
-
Docker Desktop の設定を開く:
- タスクトレイ/メニューバーのDockerアイコン → 「Settings」(設定)
- 「General」(一般)タブへ移動:
-
チェックを外す:
- 「Use containerd for pulling and storing images」の チェックボックスをオフ にします.
- 適用して再起動:
この設定変更後,再度イメージをビルドしてプッシュすれば,SageMakerのエラーは解消されるはずです.お試しください.
解決策 2:Docker のバージョンを下げる
もう一つの解決策はDocker をダウングレードすることです.Docker Forumのmeierpa 氏のコメントによると,この問題が発生したのはversion 27.1.2以降のDocker であるそうです.また,Docker Desktop version 4.31.0以前をインストールすることで解決したとの報告があります.こちらに関しては筆者は試していません.
参考: Docker Forums - Force image to use manifest media type docker v2 schema 2 instead of oci? (meierpa 氏のコメント)
まとめ
以上,Amazon SageMakerでカスタムDockerイメージを使う際に Unsupported manifest media type エラーが出た際の解決策についてまとめさせていただきました.
間違いや指摘等ありましたらコメントの方よろしくお願いします.