Oxcart ダウンロード
メニュー

Google Cloud RunのコンテナをMacでローカル実行・テストする

Appleシリコン MacでCloud Runサービスをテストするには、linux/amd64向けにビルドし、PORT変数を指定して実行します:docker run -e PORT=8080 -p 8080:8080 IMAGE。Oxcartでは自作サービスとGoogleのCloud Runサンプルの両方がこの方法で動作しました。amd64イメージはRosetta経由で実行されるため、デプロイするものと同じイメージをテストできます。

更新日

Cloud Runのコンテナ実行要件

Cloud Runは、いくつかの要件を満たすコンテナを実行できます。Googleのドキュメントでは、リクエストはデフォルトでポート8080に送信され、イングレスコンテナに環境変数PORTが設定されます。また、コンテナは「0.0.0.0でリクエストを待ち受ける必要がある」「127.0.0.1では待ち受けるべきではない」とされています。Cloud Runは「Linux x86_64 ABI形式を明示的にサポート」し、複数アーキテクチャのイメージにはlinux/amd64が必要とも記載されています。

Macでの開発でつまずきやすいのは、このうち2点です。localhostにバインドするアプリはローカルのターミナルでは動いてもCloud Runでは失敗します。また、Appleシリコンでネイティブにビルドしたイメージはarm64です。実際のコンテナをローカルでテストすれば、デプロイ前に両方を見つけられます。

AppleシリコンでCloud Runサービスをローカルテストする

  1. $PORTと0.0.0.0で待ち受けます。 サーバーに環境変数PORTを読み取らせ(Cloud Runのデフォルト送信先は8080)、127.0.0.1ではなく0.0.0.0にバインドします。
  2. linux/amd64向けにビルドします。 docker buildx build --platform linux/amd64 --load -t my-service .を実行します。Cloud RunはLinux x86_64 ABIをサポートするため、Macでネイティブにビルドしたarm64イメージはターゲットが異なります。
  3. Cloud Runと同じ方法で実行します。 docker run --rm --platform linux/amd64 -e PORT=8080 -p 8080:8080 my-serviceを実行します。Oxcartはamd64イメージをRosetta経由で動かします。
  4. サービスを呼び出します。 curl localhost:8080を実行します。PORTの処理を確認するため、-e PORT=9090 -p 9090:9090で2つ目のインスタンスを起動します。
  5. Artifact Registryへプッシュします。 gcloud auth configure-docker REGION-docker.pkg.devを一度実行し、イメージにREGION-docker.pkg.dev/PROJECT/REPO/my-service:TAGというタグを付け、docker pushで送信します。

Oxcartで実行したもの

$PORTにバインドする小さなPythonサービスを異なるポートで2回実行し、Google自身のサンプルイメージも実行しました。

docker run -d -e PORT=8080 -p 18081:8080 my-service
docker run -d -e PORT=9090 -p 18090:9090 my-service
curl localhost:18081        # hello from PORT=8080
curl localhost:18090        # hello from PORT=9090

docker run -d -e PORT=8080 -p 8081:8080 us-docker.pkg.dev/cloudrun/container/hello
docker image inspect us-docker.pkg.dev/cloudrun/container/hello --format '{{.Os}}/{{.Architecture}}'
# linux/amd64
curl localhost:8081         # "It's running!"

Googleのサンプルはamd64専用イメージです。Oxcartはこれを取得し、追加フラグなしでRosetta経由で実行しました。自分でビルドしたamd64専用イメージには、docker runでも--platform linux/amd64を指定してください。テストでは、ローカルでビルドしたamd64イメージはプラットフォーム指定時にしか見つかりませんでした。

Appleシリコンでlinux/amd64向けにビルドする

# Cloud Run target: amd64
docker buildx build --platform linux/amd64 --load -t my-service:amd64 .

# Both architectures in the local image store (runs locally either way)
docker buildx build --platform linux/amd64,linux/arm64 -t my-service:multi .

Oxcartのデフォルトビルダーにはlinux/amd64とlinux/arm64の両方が表示され、複数プラットフォームのビルドはローカルで完了し、どちらも実行できます。Oxcartからの複数プラットフォームイメージのプッシュには対応していないため、Cloud Runには実際に実行されるamd64タグをプッシュしてください。小さなローカルコンテキストのビルドはキャッシュなしで341 ms、キャッシュありで121 msと速く、テストした3つのランタイムで最速でした。

Artifact Registryへプッシュしてデプロイする

gcloud auth configure-docker us-central1-docker.pkg.dev
docker tag my-service:amd64 us-central1-docker.pkg.dev/my-project/apps/my-service:1.0.0
docker push us-central1-docker.pkg.dev/my-project/apps/my-service:1.0.0
gcloud run deploy my-service \
  --image us-central1-docker.pkg.dev/my-project/apps/my-service:1.0.0 --region us-central1

Composeで依存サービスを動かす

Cloud Runサービスは通常、データベース、キャッシュ、別のサービスと通信します。Composeで一緒に実行し、サービスの環境にPORTを設定して、ヘルスチェックで起動順を制御します。

services:
  api:
    build: .
    platform: linux/amd64
    environment:
      PORT: "8080"
      REDIS_URL: redis://cache:6379
    ports: ["8080:8080"]
    depends_on:
      cache:
        condition: service_healthy
  cache:
    image: redis:7-alpine
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 2s
      retries: 30

docker compose up -d --waitはキャッシュが正常になり、APIが起動すると戻ります。AppleシリコンのComposeガイドでは、ヘルスチェック、amd64イメージ、ポートを詳しく説明しています。

Macのポート

公開ポートはDockerのデフォルトと同様に、Macのすべてのインターフェースで待ち受けます。別のMacアプリがすでに127.0.0.1:8080で待ち受けていると、localhost:8080がコンテナではなくそのアプリに到達する場合があります。空いているホストポート(-p 18080:8080)を選び、PORTはCloud Runの設定どおりに保ちましょう。OxcartのPorts画面はMac上のすべての待ち受けサービスをコンテナと並べて表示し、コンテナのポートが応答しない理由を説明します。コンテナ内のサーバーが127.0.0.1にバインドしている場合も対象です。これはCloud Runでも拒否される同じ誤りです。Macのコンテナネットワークを参照してください。

よくある質問

MacでCloud Runサービスをローカル実行するには?

PORT変数を設定し、ポートを公開してコンテナを実行します:docker run -e PORT=8080 -p 8080:8080 IMAGE。これはGoogleがDockerでのローカルテスト用に説明している方法です。Oxcartでは自作イメージのポート8080と9090、およびGoogleのus-docker.pkg.dev/cloudrun/container/helloサンプルで確認しました。

AppleシリコンでビルドしたイメージのCloud Runへのデプロイが失敗するのはなぜですか?

Googleによると、Cloud RunはLinux x86_64 ABIをサポートし、複数アーキテクチャのイメージにはlinux/amd64が必要です。Appleシリコン Macで通常のdocker buildを実行するとarm64イメージになります。--platform linux/amd64でビルドしてください。

デプロイ前にamd64イメージをMacで実行できますか?

はい。Oxcartはlinux/amd64イメージをRosetta経由で実行します。ローカルで自作したamd64専用イメージには--platform linux/amd64を指定してください。Googleのhelloサンプルなど、取得したamd64イメージはテストでは指定なしで動作しました。

ローカルでは動くのに、Cloud Runでポートを待ち受けられないと言われます。なぜですか?

最も多い原因は、127.0.0.1やハードコードしたポートへのバインドです。Cloud Runの実行要件では、コンテナは0.0.0.0でPORTのポートを待ち受ける必要があります。デフォルト以外のPORT(9090など)でローカルテストし、ハードコードされたポートを見つけましょう。

gcloud beta code devやCloud Codeは必要ですか?

いいえ、任意です。Googleはローカルテストの方法として、通常のDocker、Google Cloudへのアクセスを持つDocker、Cloud Codeエミュレータ、gcloud beta code devを挙げています。Oxcart上のDockerなら、イメージとPORTの処理を直接テストできます。gcloud beta code devはminikubeまたは既存のKubernetesコンテキストを使う開発フローを追加します。その連携が必要な場合に選んでください。

ローカルコンテナにGoogle Cloud APIへのアクセスを与えるには?

Googleの「Google Cloudへのアクセスを持つDocker」の説明に従って認証情報をマウントします。通常はマウントしたファイルとGOOGLE_APPLICATION_CREDENTIALSでApplication Default Credentialsを渡します。Oxcartのコンテナからの外向き接続はMacが開くため、MacのVPNとDNSが適用されます。

出典と測定方法

  • 例のテスト環境:Oxcart 0.1.2、Mac17,14、macOS 27.2、2026-10-10(PORTは8080と9090、Googleのhelloサンプルをlinux/amd64で実行、Buildxの単一・複数プラットフォームビルド)。
  • Cloud Runのコンテナ実行要件(ポート、0.0.0.0、x86_64):https://docs.cloud.google.com/run/docs/container-contract。ローカルテストの選択肢:https://docs.cloud.google.com/run/docs/testing/local と https://docs.cloud.google.com/sdk/gcloud/reference/beta/code/dev。2026-10-10に確認。
  • ビルド速度:Oxcart 0.1.2、2026-10-10、Apple M5 Max、8 CPU、12 GiB、5回の測定の中央値。ほかのランタイムは同日のそれ以前に、同じMacと測定環境でdocker 29.4クライアントを使って測定しました。

自分のプロジェクトで Oxcart を試す

60日間無料。その後は1ユーザー・1メジャーバージョンあたり $20。サブスクリプションではありません。

Apple silicon · macOS 26 以降

次に読む

リリースノート

Oxcart 0.1.4

最新リリース

ライセンス機能と各種改善。

  • メールの安全なリンクによるライセンスの有効化。
  • SettingsからライセンスとMacを管理。
  • ライセンスのオフライン検証。
  • パフォーマンス改善、UIの調整、不具合修正。

macOS 26.0以降が必要です

Oxcart 0.1.3

アイドル時のメモリ回収。

  • コンテナが実行されていないときに、VMのメモリを回収。
  • コンテナ、イメージ、ボリューム、ネットワークを保持。

macOS 26.0以降が必要です

Oxcart 0.1.2

コマンドラインツールの統合。

  • Oxcart付属のDockerツールと、すでにインストールされているDockerツールを切り替え。
  • UIの調整。

macOS 26.0以降が必要です

Oxcart 0.1.1

同梱のDockerツールとエージェントの制御。

  • Docker CLI 29.9、Compose 5.6、Buildx 0.38を同梱。
  • Dockerコンテキストとの連携と、キーチェーンでの認証情報の安全な保管。
  • MCPエージェントの接続と、エージェントごとの権限設定・ブロック。

macOS 26.0以降が必要です

Oxcart 0.1.0

Appleシリコン向けのDocker互換コンテナ。

  • Docker CLI、Compose、Buildxとの互換性。
  • 実行環境のコンポーネントを同梱し、オフラインでセットアップ可能。
  • プロジェクトとGitブランチごとにポートを整理。
  • デフォルトで読み取り専用のMCP連携。
  • 検証済みの自動アップデート。

macOS 26.0以降が必要です