无法在 docker 多阶段构建中使用 ARG
Can't use ARG in docker multistage build
我正在尝试在 docker 多阶段构建过程中使用 ARGS。
我的 Dockerfile 看起来像:
ARG DOCKER_REGISTRY=example.com/docker
FROM $DOCKER_REGISTRY/openjdk8:latest AS installer
ARG APP_VERSION=6.3.0.78
ARG DOCKER_REGISTRY
ARG REPO_TYPE=snapshot
ARG DB_VERSION=12.2.0.11-ee
ARG DB_TYPE=oracle ARG PASSWORD
ARG DOCKER_REGISTRY
ARG DB_VERSION
ARG DB_TYPE
FROM ${DOCKER_REGISTRY}/${DB_TYPE}/database:${DB_VERSION}
ARG DB_VERSION
ARG DB_TYPE
ARG PASSWORD
RUN mkdir -p /opt/oracle/script
COPY --from=installer /opt/installer/target_script/* /opt/oracle/scripts/
每当它获取 docker 文件中的第二个 FROM 步骤时,它就会失败并显示错误 invalid reference format
,因为它无法识别获取图像的语法。
我的假设是它不知道在多阶段 docker 构建中处理 ARG
。
ARG 的范围。在第一个 FROM 行之前,它们是全局的并且仅在 FROM 行中可用。在每个阶段中,它们的范围都在该阶段结束之前。所以你需要:
ARG DOCKER_REGISTRY=example.com/docker
# move the DB_VERSION and DB_TYPE above the first FROM line
ARG DB_VERSION
ARG DB_TYPE
FROM $DOCKER_REGISTRY/openjdk8:latest AS installer
# none of these args seem to do anything, unless you have
# ONBUILD steps that depend on them in your openjdk image
ARG APP_VERSION=6.3.0.78
ARG DOCKER_REGISTRY
ARG REPO_TYPE=snapshot
ARG DB_VERSION=12.2.0.11-ee
ARG DB_TYPE=oracle ARG PASSWORD
FROM ${DOCKER_REGISTRY}/${DB_TYPE}/database:${DB_VERSION}
# none of these args are used either
ARG DB_VERSION
ARG DB_TYPE
ARG PASSWORD
RUN mkdir -p /opt/oracle/script
COPY --from=installer /opt/installer/target_script/* /opt/oracle/scripts/
我正在尝试在 docker 多阶段构建过程中使用 ARGS。
我的 Dockerfile 看起来像:
ARG DOCKER_REGISTRY=example.com/docker
FROM $DOCKER_REGISTRY/openjdk8:latest AS installer
ARG APP_VERSION=6.3.0.78
ARG DOCKER_REGISTRY
ARG REPO_TYPE=snapshot
ARG DB_VERSION=12.2.0.11-ee
ARG DB_TYPE=oracle ARG PASSWORD
ARG DOCKER_REGISTRY
ARG DB_VERSION
ARG DB_TYPE
FROM ${DOCKER_REGISTRY}/${DB_TYPE}/database:${DB_VERSION}
ARG DB_VERSION
ARG DB_TYPE
ARG PASSWORD
RUN mkdir -p /opt/oracle/script
COPY --from=installer /opt/installer/target_script/* /opt/oracle/scripts/
每当它获取 docker 文件中的第二个 FROM 步骤时,它就会失败并显示错误 invalid reference format
,因为它无法识别获取图像的语法。
我的假设是它不知道在多阶段 docker 构建中处理 ARG
。
ARG 的范围。在第一个 FROM 行之前,它们是全局的并且仅在 FROM 行中可用。在每个阶段中,它们的范围都在该阶段结束之前。所以你需要:
ARG DOCKER_REGISTRY=example.com/docker
# move the DB_VERSION and DB_TYPE above the first FROM line
ARG DB_VERSION
ARG DB_TYPE
FROM $DOCKER_REGISTRY/openjdk8:latest AS installer
# none of these args seem to do anything, unless you have
# ONBUILD steps that depend on them in your openjdk image
ARG APP_VERSION=6.3.0.78
ARG DOCKER_REGISTRY
ARG REPO_TYPE=snapshot
ARG DB_VERSION=12.2.0.11-ee
ARG DB_TYPE=oracle ARG PASSWORD
FROM ${DOCKER_REGISTRY}/${DB_TYPE}/database:${DB_VERSION}
# none of these args are used either
ARG DB_VERSION
ARG DB_TYPE
ARG PASSWORD
RUN mkdir -p /opt/oracle/script
COPY --from=installer /opt/installer/target_script/* /opt/oracle/scripts/