为何Docker build在Amazon Linux 2 EC2实例中无法获取TARGETARCH参数值?
Amazon Linux 2中Docker build无法获取TARGETARCH参数的原因及解决办法
问题场景
在Amazon Linux 2的EC2实例上执行docker build时,Dockerfile中定义的TARGETARCH内置参数无法获取到值,但相同操作在Ubuntu 20.04和Amazon Linux 2023的EC2实例上可正常运行。
所用Dockerfile
FROM python:3.12.1-slim-bookworm AS build ARG TARGETARCH RUN echo "arch is ${TARGETARCH}"
Amazon Linux 2上的构建日志
Step 1/46 : FROM python:3.12.1-slim-bookworm AS build ---> 16c231298165 Step 2/46 : ARG TARGETARCH ---> Using cache ---> c34eb6f2eaf4 Step 3/46 : RUN echo "arch is ${TARGETARCH}" ---> Using cache ---> 5af08adff044
Ubuntu 20.04上的正常构建日志
#4 [build 1/16] FROM docker.io/library/python:3.12.1-slim-bookworm@sha256:a64ac5be6928c6a94f00b16e09cdf3ba3edd44452d10ffa4516a58004873573e #4 CACHED #5 [internal] load build context #5 transferring context: 65B done #5 DONE 0.0s #6 [build 2/16] RUN echo "arch is amd64" #6 0.193 arch is amd64 #6 DONE 0.2s
原因分析
TARGETARCH是Docker BuildKit构建后端提供的内置平台参数,用于识别目标架构。而Amazon Linux 2默认安装的Docker版本通常较低,且默认使用传统的构建后端(非BuildKit),传统后端不支持TARGETARCH这类内置的平台相关参数。
Ubuntu 20.04和Amazon Linux 2023默认搭载的Docker版本更高,且已默认启用BuildKit,因此能正常识别TARGETARCH参数。
解决办法
有两种可行方案:
- 启用BuildKit构建后端:在执行
docker build前设置环境变量,强制使用BuildKitDOCKER_BUILDKIT=1 docker build -t your-image-name . - 升级Amazon Linux 2上的Docker版本:通过Amazon Linux Extras或官方Docker源升级到支持BuildKit的新版本Docker,升级后BuildKit会默认启用(部分版本可能仍需手动开启)
内容的提问来源于stack exchange,提问作者Udi Dahan
相关产品推荐
相关产品推荐

