💭

M1/M2 MacBook環境でDocker BuildしたImageをCloud Runにデプロイするときの注意点

2022/08/30に公開

解決方法だけ知りたい方は、結論セクションを御覧ください。

はじめに

私事ですが、先日新しい M2 MacBookAir を買いました。

ことの始まりはこのイベントが原因です。


ここ最近、GitHub Actions の CI/CD 環境でデプロイ作業をしてたのでローカルの Docker 環境を気にしてませんでした。
しかしつい先週大学の教授から、大学時代に作った「研究室マッチングシステム」というアプリを今年も卒業研究室配属のマッチングに使うと連絡があり、チューニングしました。
CI/CD 環境なんてしらない3年前の僕が設計したため、ローカルで Build するようのスクリプトが作られてました。

gcloud config set project *******
docker build -t ******* ./packages/app
docker tag ******* gcr.io/*******
docker push gcr.io/*******
gcloud beta run deploy staging \
  --image gcr.io/******* \
  --max-instances 2 \
  --region asia-northeast1 \
  --platform managed \
  --memory 1G \
  --service-account ${GCLOUD_CLIENT_EMAIL} \
  --allow-unauthenticated

このコマンドを実行すると以下のようなエラーが発生しました。

ビルド周りは一切触ってなかったので、Cloud Run の不具合だと思い再ビルドを何回か繰り返しましたが結果は変わりませんでした。

解決方法

ググった結果、以下の記事にいきつきました。

https://stackoverflow.com/questions/66127933/cloud-run-failed-to-start-and-then-listen-on-the-port-defined-by-the-port-envi

読むと M1 環境でビルドする際、Docker Build コマンドに--platform linux/amd64を加えるだけでよいとのことでした。
以下のコマンドに変更し、デプロイした結果うまく動くことができました。

docker build --platform linux/amd64 -t ***** .

M2 MacBook が原因とういことでした。

まとめ

M1/M2 環境で Docker Build して Image 作成するときは、上記のオプションを付けることに注意しましょう。
と言いたいとこですが、CI/CD でデプロイしていれば3日間時間を費やすことはなかったのです。

余談

先程話にでてきた「研究室マッチングシステム」は大学時代の卒業研究内容なので、オープンソースにしてます。
数年前の自分が書いたコードなので非常にひどい設計ですが、マッチングアルゴリズムや Nuxt 2の開発の参考になれば幸いです。

https://github.com/hyodoblog/sap

ちなみに最近の僕は Nuxt から Next に完全移行しておりますw

GitHubで編集を提案
YOSHINANI

Discussion