Tengo algunos RUN
comandos en mi Dockerfile con los que me gustaría ejecutar -no-cache
cada vez que construyo una imagen de Docker.
Entiendo docker build --no-cache
que deshabilitará el almacenamiento en caché para todo el Dockerfile.
¿Es posible deshabilitar la caché para un comando RUN específico?
Respuestas:
Siempre hay una opción para insertar algún comando sin sentido y barato de ejecutar antes de la región para la que desea deshabilitar el caché.
Como se propone en el comentario de este problema , se puede agregar un bloque de argumento de compilación (el nombre puede ser arbitrario):
antes de dicha región, y modifique su valor en cada ejecución agregando
--build-arg CACHEBUST=$(date +%s)
comodocker build
argumento (el valor también puede ser arbitrario, aquí es la fecha y hora actual, para garantizar su singularidad entre las ejecuciones).Esto, por supuesto, también desactivará la caché para todos los bloques siguientes, ya que la suma hash de la imagen intermedia será diferente, lo que hace que la desactivación de la caché verdaderamente selectiva sea un problema no trivial, teniendo en cuenta cómo funciona actualmente Docker.
fuente
---> Using cache
en mi línea `` ARG CACHEBUST = 1` ... (y sí, lo hice--build-arg CACHEBUST=$(date +%s)
en mi comando docker)RUN echo "$CACHEBUST"
ya que solo usarARG
no invalidará el cachéUtilizar
antes de la línea RUN que desea ejecutar siempre. Esto funciona porque ADD siempre buscará el archivo / URL y la URL anterior genera datos aleatorios en cada solicitud, Docker luego compara el resultado para ver si puede usar el caché.
También probé esto y funciona bien ya que no requiere ningún argumento adicional de línea de comando de Docker y también funciona desde un archivo Docker-compose.yaml :)
fuente
No directamente, pero puede dividir su Dockerfile en varias partes, crear una imagen, luego DESDE esta imagen al comienzo del siguiente Dockerfile y crear la imagen con o sin almacenamiento en caché.
fuente
A partir de febrero de 2016 no es posible.
La función ha sido solicitada en GitHub.
fuente
la característica agregada hace una semana.
https://github.com/moby/moby/issues/1996#issuecomment-550020843
fuente
Creo que esta es una ligera mejora en la respuesta de @ steve, arriba:
Esto usa la caché de Docker del clon de git, pero luego ejecuta una actualización sin caché del repositorio.
Se parece a trabajar, y es más rápido - pero muchas gracias a @steve para proporcionar los principios subyacentes.
fuente
Otro truco rápido es escribir algunos bytes aleatorios antes de su comando
escribe 5 bytes aleatorios que forzarán una falta de caché
fuente