説明
FROM の --platform は、そのステージで使用する OS とアーキテクチャを選択します。linux/arm64 のように固定すると、別の対象向けのビルドで意図しないプラットフォームを使ったり、エミュレーションが必要になったりする場合があります。
プラットフォームの指定自体が誤りではありません。意図したクロスコンパイルや、$BUILDPLATFORM 上でビルドツールを実行するために必要な場合もあります。
想定される影響
- 対象と異なるバイナリを作成したり、実行に失敗したりする場合があります。
- 不要なエミュレーションでビルドが遅くなる場合があります。
対処方法
- 固定のプラットフォームが必要か確認し、ビルドの対象に従うステージでは不要な FROM --platform 指定を削除してください。
- buildx --platform などでビルド対象を指定し、必要な各プラットフォームで結果を確認してください。指定を削除するだけでアプリケーションの移植性が保証されるわけではありません。
例
ステージのプラットフォーム選択だけを比較します。ベースイメージとアプリケーションの依存関係も対象のプラットフォームに対応している必要があります。
変更前
dockerfile
FROM --platform=linux/arm64 node:22-alpine
WORKDIR /app
COPY . .
変更後
dockerfile
FROM node:22-alpine
WORKDIR /app
COPY . .
補足:
- 変更前: ステージを linux/arm64 に固定します。意図した ARM64 専用の構成なら使用できます。
- 変更後: ステージがビルドの対象プラットフォームに従います。実際の実行互換性は別途確認する必要があります。