Отключить кеш для определенных команд RUN
У меня есть несколько команд RUN
в моем Dockerfile, которые я хотел бы запускать с -no-cache
каждый раз, когда я создаю образ Docker.
Я понимаю, что docker build --no-cache
отключит кэширование для всего Dockerfile.
Можно ли отключить кеш для конкретной команды RUN?
Ответы
Ответ 1
Всегда есть возможность вставить какую-то бессмысленную и дешевую команду перед регионом, для которого вы хотите отключить кеш.
Как предложено в этом комментарии к проблеме, можно добавить блок аргумента сборки (имя может быть произвольным):
ARG CACHEBUST=1
перед таким регионом, и изменяйте его значение при каждом запуске, добавляя --build-arg CACHEBUST=$(date +%s)
в качестве аргумента docker build
(значение также может быть произвольным, здесь это текущая дата-время, чтобы гарантировать его уникальность при каждом запуске).
Это, конечно, также отключит кэш для всех следующих блоков, так как хэш-сумма промежуточного изображения будет отличаться, что делает действительно выборочный кэш отключением нетривиальной проблемы, принимая во внимание, как работает докер в настоящее время.
Ответ 2
Не напрямую, но вы можете разделить свой файл Docker в нескольких частях, создать образ, затем FROM thisimage в начале следующего файла Docker и создать изображение с кешированием или без него
Ответ 3
По состоянию на февраль 2016 года это невозможно.
Функция была запрошена на GitHub
Ответ 4
Еще один быстрый взлом состоит в том, чтобы написать несколько случайных байтов перед вашей командой
RUN head -c 5 /dev/random > random_bytes && <run your command>
записывает 5 случайных байтов, которые вызовут промах кэша
Ответ 5
Быстро ответить
Просто поставьте это перед вашей командой: ARG CACHEBUST = 1. Пример
ARG CACHEBUST=1
RUN echo "Hi"
И выполните сборку так:
docker build -t your-image --build-arg CACHEBUST=$(date +%s) .
Объяснение
fooobar.com/info/501633/... (Ответ владислава)
Источник
http://dev.im-bot.com/docker-select-caching/