如何在 docker buildx 时,在 Dockerfile 中获取编译平台信息
有时候在编译 Docker 镜像的时候,镜像内某些工具下载的时候,需要指定平台。
比如我在下载某个工具的时候,工具方提供的地址是类似下面这样的:
https://a.com/20250518/hclient-cli-amd64.tar.gz
https://a.com/20250518/hclient-cli-arm64.tar.gz
那么我们需要在 Dockerfile 执行过程中获取到编译平台的信息,是 amd64 还是 arm64。
实现方法很简单,如下:
ARG TARGETPLATFORM
ARG TARGETOS
ARG TARGETARCH
RUN echo "Building for platform: $TARGETPLATFORM" && \
echo "Target OS: $TARGETOS" && \
echo "Target Arch: $TARGETARCH"
只要在 Dockerfile 中加入三个 ARG 变量即可,这三个变量是预制的,docker buildx
会在构建的时候传入具体的值,效果如下:
=> [linux/amd64 2/4] RUN echo "Building for platform: linux/amd64" && echo "Target OS: linux" && echo "Target Arch: amd64" && sleep 60 4.7s
=> => # Building for platform: linux/amd64
=> => # Target OS: linux
=> => # Target Arch: amd64
=> [linux/arm64 2/4] RUN echo "Building for platform: linux/arm64" && echo "Target OS: linux" && echo "Target Arch: arm64" && sleep 60 4.7s
=> => # Building for platform: linux/arm64
=> => # Target OS: linux
=> => # Target Arch: arm64