FromPlatformFlagConstDisallowed

出力

FROM --platform flag should not use constant value "linux/amd64"

(訳: FROM の --platform フラグでは定数値 "linux/amd64" を用いるべきではありません)

内容説明

Dockerfile 内にて --platform を指定すると FROM 命令はただ一つのプラットフォームを対象としてイメージビルドを行います。 これを行ってしまうと、この Dockerfile からはマルチプラットフォームイメージのビルドができなくなります。 つまり --platform に指定したプラットフォームしかビルドできないということです。

この場合に推奨される方法は以下のとおりです。

  • Dockerfile では FROM --platform の記述を行わず、コマンドラインから --platform 引数として指定する。
  • --platform 引数として $BUILDPLATFORM あるいは他の変数の組み合わせを指定する。
  • ステージ名にはプラットフォーム、OS、アーキテクチャーを必ず含めるようにして、そこではプラットフォーム固有の命令のみを実現するようにする。

❌ 不可: --platform に対して定数引数を指定しています。

FROM --platform=linux/amd64 alpine AS base
RUN apk add --no-cache git

✅ 可: デフォルトのプラットフォームを用いています。

FROM alpine AS base
RUN apk add --no-cache git

✅ 可: メタ変数を用いています。

FROM --platform=${BUILDPLATFORM} alpine AS base
RUN apk add --no-cache git

✅ 可: マルチステージビルドにおいてターゲットアーキテクチャーを用いています。

FROM --platform=linux/amd64 alpine AS build_amd64
...

FROM --platform=linux/arm64 alpine AS build_arm64
...

FROM build_${TARGETARCH} AS build
...