1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🚨【解決済み】ECS で発生した「CannotPullContainerError: image manifest does not contain descriptor matching platform 'linux/amd64'」の原因と対策

1
Posted at

はじめに

AWS ECS(または Fargate)で Docker イメージを使ってコンテナをデプロイしようとしたところ、次のようなエラーが発生しました。

CannotPullContainerError: pull image manifest has been retried 5 time(s): 
image manifest does not contain descriptor matching platform 'linux/amd64'

これは、コンテナイメージが linux/amd64 アーキテクチャに対応していない場合に発生する典型的なエラーです。本記事では、原因と解決法を具体的に解説します。

エラーの意味

このエラーは、ECS が Docker イメージを pull(取得)しようとしたときに:

  • ターゲットプラットフォーム:linux/amd64
  • しかし、リモートのイメージにはそのプラットフォームに対応する descriptor(イメージ情報)が存在しなかった
    という状況を表します。
    つまり、イメージはあるけど、ECS が必要としているアーキテクチャ用ではない
ということ。

原因

✅ よくある原因:ビルドしたイメージが linux/amd64 に対応していない
Docker イメージを docker build でビルドしただけでは、そのマシンのアーキテクチャ(たとえば M1 Mac なら arm64)に最適化されたイメージが作られます。
その結果:

  • ECS(x86_64 基盤)からは 非対応のイメージに見えてしまう
  • CannotPullContainerError が発生する

解決方法

✅ 解決策①:buildx を使って linux/amd64 向けにビルド&push する

docker buildx build \
  --platform linux/amd64 \
  -t 127929167946.dkr.ecr.ap-northeast-1.amazonaws.com/ctn-cicd-hdon-repo:latest \
  --push \
  .
* --platform linux/amd64:ECS 用に x86 アーキテクチャでビルド
* --push:ECR に直接 push(これがないとマニフェストが付かない)

🔍 プラットフォーム確認コマンド

まとめ

原因

イメージが linux/amd64 に対応していない

対応

docker buildx build --platform linux/amd64 ... --push を使う
イメージが arm64 のみ ECS タスク定義で ARM64 を指定する
docker build のみでイメージを作っていた buildx を使ってプラットフォーム明示する

さいごに

このエラーはコンテナ開発初期にかなり頻繁に遭遇する落とし穴です。Docker のビルドプラットフォームと ECS の実行環境が一致しているかどうか、これを常に意識することで、トラブルを未然に防げます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?