In un file Docker, l'ho fatto
COPY . .
Voglio escludere un'intera directory, nel mio caso, directory node_modules.
Qualcosa come questo:
COPY [all but **/node_modules/**] .
Questo è possibile con Docker?
In un file Docker, l'ho fatto
COPY . .
Voglio escludere un'intera directory, nel mio caso, directory node_modules.
Qualcosa come questo:
COPY [all but **/node_modules/**] .
Questo è possibile con Docker?
Risposte:
Crea un file .dockerignore
nella 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
/config/nginx/ /config/logstash/
lo trovo nel container bash:ls config/ gunicorn logs logstash nginx
ls /config/
, hai provato ad aggiungere quei percorsi al tuo .dockerignore senza il comando /
?
node_modules
non funziona nelle sottodirectory.
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.
COPY failed: no source files were specified
quando non ci sono file che iniziano con 'no', ma non 'annuisci'.
src/
andare /var/www
e /conf/nginx.conf
andare a /etc/nginx/conf.d/default.conf
. Inoltre, puoi copiare tutto e in RUN rm -r conf
seguito (anche mantenere l'albero dei sorgenti com'era). Vorrei sapere se qualcuno ha un altro suggerimento.
COPY [^node_modules]*
per copiare tutti i file di livello superiore.
Nel mio caso, il mio Dockerfile conteneva un passaggio di installazione, che produceva la vendor
directory (l'equivalente di PHP di node_modules
). Ho quindi COPY
questa directory sull'immagine dell'applicazione finale. Pertanto, non ho potuto inserire il vendor
mio .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 vendor
directory sull'host viene copiata nel contesto Docker durante il processo di compilazione, il che aggiunge tempo.
composer.lock
prima composer install
. Senza il file di blocco, un nuovo set di dipendenze (la cartella del fornitore) potrebbe essere installato alla successiva creazione.
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)
Escludendo node_modules dalla directory corrente
node_modules
Escludendo node_modules in qualsiasi sottodirectory immediata
*/node_modules
Ecco i documenti ufficiali
.dockerignore
?