Отключить кеш для определенных команд 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/