Это невозможно. Кэш сборки Docker работает путем вычисления хэша из предыдущего изображения и действий на этом шаге, где он включает фактическое содержимое любых файлов ADD
ed или COPY
ed.
Например, если у вас есть
FROM some/base # 00000000
RUN step-l # 11111111
RUN step-m --option-a # 22222222
RUN step-n # 33333333
, то что кэшируется для последней строки, это «изображение 22222222, плюс RUN step-n
, создает изображение 33333333».Но если вы затем измените
FROM some/base # 00000000
RUN step-l # 11111111
RUN step-m --option-b # 44444444
RUN step-n
, то в кеше нет ничего для "image 44444444, плюс RUN step-n
".
Если ваши шаги сильно отличаются, вы можете воспользоватьсямногоэтапной сборки
FROM some/base AS build-m
RUN step-m --option-a
FROM some/base AS build-n
RUN step-n
FROM some/base
COPY --from=build-m /opt/m /opt/m
COPY --from=build-n /opt/n /opt/n
Тогда даже если вы измените RUN step-m
, RUN step-n
все еще может быть кэширован.Окончательную сборку все равно придется повторять, но это только копирование файлов.(Представьте себе установку, в которой на шаге webpack
выполняется предварительная компиляция приложения браузера, и вам просто нужно скопировать, например, его дерево dist
.)