Ejecuto una compilación en una aplicación de nodo y luego uso los artefactos para crear una imagen acoplable. El comando COPY que mueve mi fuente en su lugar no detecta cambios en los archivos fuente después de una compilación; es solo usar el caché.
Step 9/12 : COPY server /home/nodejs/app/server ---> Using cache ---> bee2f9334952
¿Estoy haciendo algo mal con COPY o hay alguna forma de no almacenar en caché un paso en particular?
Encontré esto en la documentación de Docker :
Para las instrucciones
ADDyCOPY, se examinan los contenidos de los archivos en la imagen y se calcula una suma de verificación para cada archivo. Las horas de última modificación y último acceso de los archivos no se consideran en estas sumas de verificación. Durante la búsqueda en caché, la suma de verificación se compara con la suma de verificación en las imágenes existentes. Si algo ha cambiado en los archivos, como el contenido y los metadatos, la memoria caché se invalida.
Entonces, según tengo entendido, el caché debería invalidarse. Puede usar la opción de línea de comandos --no-cache para asegurarse. Si obtiene el comportamiento correcto con --no-cache y un comportamiento incorrecto sin él, habría descubierto un error y debería informarlo.
Esto fue interesante. Descubrí que COPY ESTABA funcionando, solo parecía que no.
Estaba reconstruyendo las imágenes y reiniciando mis contenedores, pero el contenedor aún usaba la imagen anterior. Tuve que eliminar mis contenedores, y luego, cuando los inicié, usaron la imagen más nueva que se creó y pude ver mis cambios.
Aquí hay otro hilo que trata sobre este diagnóstico con mayor precisión (en mi caso).
Podrías probar con ADD en su lugar. Invalidará el caché para la copia. El lado malo es que también invalidará el caché para los otros comandos posteriores. Si su ADD está en los últimos pasos, no debería afectar mucho el proceso de compilación.
Nota: La primera instrucción ADD encontrada invalidará el caché para todas las instrucciones siguientes del Dockerfile si el contenido ha cambiado. Esto incluye la invalidación de la memoria caché para las instrucciones RUN. Consulte la guía de prácticas recomendadas de Dockerfile para obtener más información. https://docs.docker.com/engine/reference/builder/#add