【M1 Mac】LaravelプロジェクトをECSにデプロイし、タスクを実行する場合のプラットフォームの指定について
Laravelプロジェクトのイメージをローカルでビルドし、それをECS上で実行(タスクの実行)する際に、プラットフォームを指定していなかったため、それぞれでエラーが発生しました。😭
ローカルでLaravelプロジェクトのイメージをビルドすると表示されるエラー
次のようにERROR FROM docker.io/<イメージ名>/composer:latest
とfailed to load cache key: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
というエラーが表示されました。
[+] Building 9.2s (10/14)
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 731B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 34B 0.0s
=> [internal] load metadata for docker.io/library/php:7.4-fpm 2.0s
=> [auth] library/php:pull token for registry-1.docker.io 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 5.96kB 0.0s
=> ERROR FROM docker.io/<イメージ名>/composer:latest 7.0s
# 〜省略〜
------
failed to load cache key: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
ECSでタスクを実行した際のエラー
CloudWatch>ロググループ>イベントログ
で確認するとexec /usr/local/bin/docker-php-entrypoint: exec format error
と表示されました。
エラーの原因について
プラットフォームの不一致が原因です。
Dockerイメージが異なるプラットフォームでイメージのビルドやECSクラスターでタスクを実行しようとするとプラットフォームの不一致によりエラーが発生する可能性があるので、適したプラットフォームを指定する必要があります。
イメージのビルドとECSタスクの実行の両方が成功する2つのパターン
①LaravelのDockerfileのみプラットフォームを指定する
Head | Dockerfileでプラットフォームを指定(例:FROM --platform=linux/amd64 php:7.4-fpm) | イメージのビルド時にプラットフォームを指定(例:--platform=linux/amd64) |
---|---|---|
Composer | × | × |
Laravel | ◯ | × |
②ComposerとLaravelのDockerfile、build時に全てでプラットフォームを指定する
Head | Dockerfileでプラットフォームを指定(例:FROM --platform=linux/amd64 php:7.4-fpm) | イメージのビルド時にプラットフォームを指定(例:--platform=linux/amd64) |
---|---|---|
Composer | ◯ | ◯ |
Laravel | ◯ | ◯ |
パターン①で問題が発生していない場合、そのまま続けても問題はないかもしれませんが一貫性を保つために、すべてのコンテナイメージでプラットフォームを指定して同じプラットフォームでビルドされるようにした方が良いです。
以上の理由から、パターン②(ComposerとLaravelのDockerfile、ビルド時に全てでプラットフォームを指定する)を使用してください!
余談(自分メモ)
タスク実行のみの場合は、Nginxにプラットフォームの指定は不要です。
終わりに
何かありましたらお気軽にコメント等いただけると助かります。
ここまでお読みいただきありがとうございます🎉
Discussion