参数化 Docker 图片前缀

Parameterising Docker Image prefix

我有一个包含以下内容的 Dockerfile

# Build
FROM ${ECR_PREFIX}/maven:3.6.3-jdk-11 AS build
COPY src /home/app/src
COPY pom.xml /home/app
RUN mvn -f /home/app/pom.xml clean package

# Package
FROM ${ECR_PREFIX}/openjdk:11-jre-slim
COPY --from=build /home/app/target/application.jar application.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "application.jar"]

我尝试使用

构建它
export PREFIX=${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com
docker build -t backend --build-arg ECR_PREFIX=$PREFIX .

但这行不通。由于各种原因,我真的尽量不要对前缀进行硬编码,尤其是 ${AWS::AccountId} 的一部分。

这里有任何指示吗?

您必须在 Dockerfile 中显式声明 ARG。如果你 use an ARG value in a FROM line 那么 ARG 需要在任何 FROM 之前。 (其他 ARG 需要在使用它们的每个构建阶段重复。)

ARG REGISTRY=docker.io
FROM ${REGISTRY}/maven:3.6.3-jdk-11 AS build
REGISTRY=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com
docker build \
  -t $REGISTRY/backend:$(git rev-parse HEAD) \
  --build-arg REGISTRY=$REGISTRY \
  .