HerokuでDockerファイルの実行形式エラーが発生する(M1チップ)


  1. マルチアーキテクチャのサポートを確認する: HerokuがARMアーキテクチャをサポートしているかどうかを確認します。HerokuがARMに対応している場合は、DockerイメージをARMアーキテクチャ用にビルドする必要があります。

  2. ベータ版のDockerイメージを使用する: Docker Desktopのベータ版では、M1チップ向けのARMイメージをビルドすることができます。Dockerコマンドを使用してARMイメージをビルドし、それをHerokuにデプロイします。

  3. ネイティブなビルドを行う: Dockerを使用せずに、直接ネイティブなビルドを行う方法もあります。Heroku上でARMアーキテクチャ用にビルドされたネイティブなバイナリを実行することで、問題を回避できます。

以下に、それぞれの方法のコード例を示します。

  1. マルチアーキテクチャのサポートを確認する場合:
# Dockerfile
FROM --platform=linux/amd64 heroku/cedar:14
# ビルド手順
  1. ベータ版のDockerイメージを使用する場合:
# Dockerfile
FROM --platform=linux/arm64/v8 ubuntu:latest
# ビルド手順
  1. ネイティブなビルドを行う場合:
# ターミナルで実行
# ビルド
GOOS=linux GOARCH=arm64 go build -o main
# Herokuにデプロイ
heroku container:push web -a your-app
heroku container:release web -a your-app