У меня есть несколько RUN
команд в моем Dockerfile, которые я хотел бы запускать -no-cache
каждый раз, когда создаю образ Docker.
Я понимаю, что docker build --no-cache
это отключит кеширование для всего файла Dockerfile.
Можно ли отключить кеш для конкретной команды RUN?
Ответы:
Всегда есть возможность вставить какую-нибудь бессмысленную и дешевую в исполнении команду перед регионом, для которого вы хотите отключить кеш.
Как предлагается в этом комментарии к проблеме , можно добавить блок аргументов сборки (имя может быть произвольным):
перед таким регионом и изменяйте его значение при каждом запуске, добавляя
--build-arg CACHEBUST=$(date +%s)
в качествеdocker build
аргумента (значение также может быть произвольным, здесь это текущая дата и время, чтобы гарантировать его уникальность при выполнении).Это, конечно же, отключит кеш для всех следующих блоков, так как хеш-сумма промежуточного изображения будет другой, что делает действительно выборочное отключение кеша нетривиальной проблемой, учитывая, как в настоящее время работает докер.
источник
---> Using cache
под мою строку `` ARG CACHEBUST = 1` ... (и да, я сделал--build-arg CACHEBUST=$(date +%s)
в своей команде докера)RUN echo "$CACHEBUST"
поскольку простое использованиеARG
не приведет к аннулированию кешаИспользовать
перед строкой RUN, которую вы хотите всегда запускать. Это работает, потому что ADD всегда будет извлекать файл / URL-адрес, а указанный выше URL-адрес генерирует случайные данные для каждого запроса, затем Docker сравнивает результат, чтобы узнать, может ли он использовать кеш.
Я также протестировал это и отлично работает, поскольку он не требует дополнительных аргументов командной строки Docker, а также работает с файлом Docker-compose.yaml :)
источник
Не напрямую, но вы можете разделить свой Dockerfile на несколько частей, построить образ, затем ИЗ этого образа в начале следующего Dockerfile и построить образ с кэшированием или без него.
источник
По состоянию на февраль 2016 года это невозможно.
Функция запрошена на GitHub
источник
функция добавлена неделю назад.
https://github.com/moby/moby/issues/1996#issuecomment-550020843
источник
Я считаю, что это небольшое улучшение по сравнению с ответом @stve выше:
Это использует кеш Docker клона git, но затем запускает некэшированное обновление репозитория.
Он появляется на работу, и это быстрее - но многие благодаря @steve для обеспечения основополагающих принципов.
источник
Еще один быстрый прием - написать несколько случайных байтов перед вашей командой.
записывает 5 случайных байтов, что приведет к пропуску кеша
источник