2016-02-24 3 views
2

В моем файле Docker у меня может быть такой шаг, который будет выглядеть так, чтобы установить некоторые пакеты.Проверьте обновленный пакет через yum в файле Docker

Run yum install pkg1 pkg2 -y &&\ 
yum -y clean all 

Проблема заключается в том, что, когда я строю контейнер несколько раз, Docker Престола эта команда не меняется и никогда не запускает его. Вместо этого он предпочитает использовать ранее кэшированный уровень.

Однако pkg1 или pkg2 могут быть обновлены в репозитории yum и должны быть обновлены, а поскольку вместо него используется кешированный уровень докеров, контейнер не получает обновленные пакеты.

Я мог бы построить с опцией -no-cache, но это приведет к недействительности всех уровней кэша, что существенно замедлит сборку контейнера, как обычно, мои команды установки yum находятся ближе к концу моих файлов Dockerfiles.

Какова наилучшая стратегия для решения этой проблемы? Есть ли какое-либо решение только для недействительности кеша докеров, если в кеше и репо есть другая версия пакета?

+0

Как насчет запуска 'yum clean expire-cache' перед' yum install'? – ciekawy

+0

К сожалению, это не помогает. Фактическая команда запуска в файле Docker по-прежнему не будет изменена, поэтому докер будет думать, что ничего не изменилось и продолжает использовать свой кешированный уровень. Кроме того, я стараюсь удостовериться, что я всегда выдаю 'yum clean all' после команды yum (в рамках одного запуска docker), поэтому не должно быть никакого кэша yum, который может истечь. – user2566987

+0

Создайте изображение со всеми командами вплоть до команды 'Run yum install pkg1 pkg2 ...'. Затем создайте новый файл Docker, который вытаскивает 'FROM' только что созданное изображение. Запустите 'docker build' с флагом' --no-cache', что приведет к недействительности последнего уровня кэша. – CtheGood

ответ

0

От «Build cache», вы можете вставить ADD или COPY директиву (фиктивный файл) как раз перед теми RUN команд.

Всякий раз, когда вы хотите сделать недействительным кэш для следующего RUN, изменять содержимое фиктивного файла и ADD/COPY (с остальными Dockerfile команд) не будет опираться на кэш.