Не могу использовать ARG в docker многоступенчатой ​​сборке - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь использовать ARGS в многоступенчатом процессе сборки docker.

Мой 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/

Всякий раз, когда он получает второй шаг FROM в файле docker, он завершается с ошибкой invalid reference format, так как не распознает синтаксис для получение изображения.

Я предполагаю, что он не знает, как обработать ARG в многоступенчатой ​​docker сборке.

1 Ответ

2 голосов
/ 16 апреля 2020

ARG's ограничены. До первой строки 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/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...