Perché COPY nella creazione di docker non rileva gli aggiornamenti

Faccio eseguire una build su un'applicazione di nodo e quindi utilizzi gli artefatti per build un'image docker. Il command COPY che sposta la mia origine non rileva le modifiche ai file di origine dopo una build; la sua appena usando la cache.

Step 9/12 : COPY server /home/nodejs/app/server ---> Using cache ---> bee2f9334952

Sto facendo qualcosa di sbagliato con COPY o c'è un modo per non memorizzare un passo particolare?

Ho trovato questo nella documentazione del docker :

Per le istruzioni ADD e COPY, vengono esaminati i contenuti dei file nell'image e viene calcolato un checksum per each file. I tempi di ultima modifica e di ultima accesso dei file non vengono considerati in queste unità di controllo. Durante la ricerca della cache, il checksum viene confrontato con il checksum nelle immagini esistenti. Se qualcosa è cambiato nei file (ad esempio contenuti e metadati), la cache viene invalidata.

Per quanto mi riguarda la cache dovrebbe essere invalidata. È ansible utilizzare –no-cache = true per assicurarsi. Se si ottiene un comportmento corretto con –no-cache = vero e falso comportmento senza che si sarebbe scoperto un bug e dovrebbe segnalarlo.

Potresti provare invece con ADD. Invaliderà la cache per la copia. Il lato negativo è che invaliderà anche la cache per gli altri comandi dopo di essa. Se il tuo ADD è negli ultimi passaggi, non dovrebbe influenzare molto il process di generazione.

Nota: la prima istruzione ADD acclusa invaliderà la cache per tutte le istruzioni riportte di seguito dal Dockerfile se il contenuto è stato modificato. Ciò include invalidare la cache per le istruzioni RUN. Consultare la guida Dockerfile Best Practices per ulteriori informazioni. https://docs.docker.com/engine/reference/builder/#add

Dal punto di vista di Docker questo è proprio come qualsiasi altro command.

Docker vede che questa linea non è cambiata, quindi lo memorizza.

Allo stesso modo, se si dispone di un command curl nel Dockerfile, Docker non recupera l'URL solo per modificarlo se è stato modificato. Controlla se il command è cambiato o no, non è il risultato.