Согласно моим комментариям выше, я считаю, что это как-то связано с внутренним способом, которым процесс сборки Docker обрабатывает команды ADD
и RUN
... Не могу найти документацию для поддержкиэто - так что кто-то с большим внутренним знанием может подтвердить или опровергнуть, но имеет смысл, как команда RUN
выполняется в слое ДО строящегося изображения, где, как команда ADD
выполняется и результат из них запекаются в изображение.
Каким бы способом это ни обрабатывалось, вы можете достичь того, что вам нужно, перейдя к методу RUN
следующим образом:
FROM <your base image>
RUN curl https://repository.internal/file.zip >> /tmp/file.zip \
&& cd /tmp \
&& unzip file.zip \
&& rm file.zip
Иу вас будут разархивированные файлы.
Возможно, вам придется проверить, требуется ли rm
в конце - не могу вспомнить, если команда unzip удаляет исходный zip-файл.
Как вы упомянули, это будет зависеть от пакетов curl
и unzip
, доступных на изображении ... однако вы можете избежать их в вашем окончательном приложении.Ионное изображение с использованием Docker Multi Stage Builds
Ваш Dockerfile будет выглядеть примерно так:
FROM <some useful base image> as collector
RUN apt-get install -y curl unzip
RUN mkdir /tmp/files && \
&& curl https://repository.internal/file.zip >> /tmp/files/file.zip \
&& cd /tmp/files \
&& unzip file.zip \
&& rm file.zip
FROM <your final desired base image>
COPY --from=collector /tmp/files /tmp
Затем будет использоваться изображение с curl
и unzip
для сбора и обработки извлечения файлов без необходимости устанавливать их в окончательном образе приложения.