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
...