COPIA con finestra mobile ma con esclusione


Risposte:


377

Crea un file .dockerignorenella directory di contesto della build della finestra mobile (quindi, in questo caso, molto probabilmente una directory che è padre di node_modules) con una riga al suo interno:

**/node_modules

anche se probabilmente vuoi solo:

node_modules

Informazioni su dockerignore: https://docs.docker.com/engine/reference/builder/#dockerignore-file


5
grazie, quindi la "COPIA.." il comando non deve cambiare, immagino
Alexander Mills,

Non proprio: /config/nginx/ /config/logstash/lo trovo nel container bash:ls config/ gunicorn logs logstash nginx
SalahAdDin

3
@SalahAdDin per lo stesso motivo per cui non hai scritto ls /config/, hai provato ad aggiungere quei percorsi al tuo .dockerignore senza il comando /?
Pablo,

8
Semplicemente node_modulesnon funziona nelle sottodirectory.
Rustyx,

5
Questo non risolve davvero il problema se vuoi averlo COPY'd ma non in quello strato ...
Wes

33

Per coloro che non possono utilizzare un file .dockerignore (ad esempio se è necessario il file in una COPIA ma non in un'altra):

Sì, ma sono necessarie più istruzioni COPY. In particolare, è necessaria una COPIA per ogni lettera nel nome file che si desidera escludere.

COPY [^n]*    # All files that don't start with 'n'
COPY n[^o]*   # All files that start with 'n', but not 'no'
COPY no[^d]*  # All files that start with 'no', but not 'nod'

Continuando fino a quando non si avrà il nome completo del file o solo il prefisso, si è ragionevolmente sicuri che non ci saranno altri file.


1
Questo non muterà perché otterrai un COPY failed: no source files were specifiedquando non ci sono file che iniziano con 'no', ma non 'annuisci'.
Verifica l'

1
In alternativa, è possibile utilizzare due diverse sottodirectory (per destinazioni di copia diverse), in modo che, ad esempio, nella mia configurazione di nginx, dovrei src/andare /var/wwwe /conf/nginx.confandare a /etc/nginx/conf.d/default.conf. Inoltre, puoi copiare tutto e in RUN rm -r confseguito (anche mantenere l'albero dei sorgenti com'era). Vorrei sapere se qualcuno ha un altro suggerimento.
Yuval,

1
Quale sarebbe una soluzione per tipi di file specifici o terminazioni di file se lo farei in questo modo?
Lea Reimann,

L'unico aspetto negativo di questo approccio è che la struttura delle cartelle è appiattita
Islam Q.

Se hai solo poche directory da copiare (pronuncia solo '/ app' o '/ src'). Un modo più semplice sarebbe quello di copiare le directory singolarmente (per mantenerne la struttura) e quindi ne hai bisogno solo una COPY [^node_modules]*per copiare tutti i file di livello superiore.
smdufb

9

Nel mio caso, il mio Dockerfile conteneva un passaggio di installazione, che produceva la vendordirectory (l'equivalente di PHP di node_modules). Ho quindi COPYquesta directory sull'immagine dell'applicazione finale. Pertanto, non ho potuto inserire il vendormio .dockerignore. La mia soluzione era semplicemente quella di eliminare la directory prima di eseguire composer install(l'equivalente di PHP di npm install).

FROM composer AS composer
WORKDIR /app
COPY . .
RUN rm -rf vendor \
    && composer install 

FROM richarvey/nginx-php-fpm
WORKDIR /var/www/html
COPY --from=composer /app .

Questa soluzione funziona e non gonfia l'immagine finale, ma non è l'ideale, poiché la vendordirectory sull'host viene copiata nel contesto Docker durante il processo di compilazione, il che aggiunge tempo.


3
Nota perché devi rimuovere composer.lockprima composer install. Senza il file di blocco, un nuovo set di dipendenze (la cartella del fornitore) potrebbe essere installato alla successiva creazione.
Lacek,

1
@Lacek: hai ragione. Ho imparato meglio da quando ho pubblicato questo.
Cameron Hudson,

1
@CameronHudson potrebbe aggiornare la tua risposta originale prima che le persone copino / incollino questa cattiva pratica.
Robin van Baalen,

2

L'aggiunta di .dockerignore funziona per me. Un ulteriore punto Coloro che stanno provando questa soluzione su Windows , Windows non ti permetterà di creare file .dockerignore (in quanto non consente per impostazione predefinita di creare file a partire da.)

Per creare tale file a partire da. su Windows , includi anche un punto finale, come: .dockerignore.e premi invio (a condizione che tu abbia abilitato la visualizzazione delle opzioni di estensione dalle opzioni della cartella)


6
È possibile creare un file in Windows che inizia con un punto terminandolo anche con un punto.
Jim Pedid

0

Escludendo node_modules dalla directory corrente

node_modules

Escludendo node_modules in qualsiasi sottodirectory immediata

*/node_modules

Ecco i documenti ufficiali

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.