Dans un fichier Docker, j'ai
COPY . .
Je veux exclure un répertoire entier, dans mon cas, le répertoire node_modules.
Quelque chose comme ça:
COPY [all but **/node_modules/**] .
Est-ce possible avec Docker?
Créez le fichier .dockerignore
dans votre répertoire contextuel de construction de docker (dans ce cas, il s'agit probablement d'un répertoire parent de node_modules) contenant une ligne:
**/node_modules
bien que vous vouliez probablement juste:
node_modules
Informations sur dockerignore: https://docs.docker.com/engine/reference/builder/#dockerignore-file
Dans mon cas, mon fichier Docker comportait une étape d’installation qui produisait le répertoire vendor
(l’équivalent PHP de node_modules
). J'ai alors COPY
ce répertoire sur l'image finale de l'application. Par conséquent, je ne pouvais pas mettre vendor
dans mon .dockerignore
. Ma solution consistait simplement à supprimer le répertoire avant d'effectuer composer install
(l'équivalent PHP de npm install
).
FROM composer AS composer
WORKDIR /app
COPY . .
RUN rm -rf composer.lock vendor \
&& composer install
FROM richarvey/nginx-php-fpm
WORKDIR /var/www/html
COPY --from=composer /app .
Cette solution fonctionne et ne gonfle pas l'image finale, mais elle n'est pas idéale car le répertoire vendor
de l'hôte est copié dans le contexte de Docker pendant le processus de construction, ce qui ajoute du temps.
Pour ceux qui ne peuvent pas utiliser un fichier .dockerignore (par exemple, si vous avez besoin du fichier dans une copie mais pas dans une autre):
Oui, mais vous avez besoin de plusieurs instructions de copie. Plus précisément, vous avez besoin d'une COPIE pour chaque lettre du nom de fichier que vous souhaitez exclure.
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'
Continuez jusqu'à ce que vous ayez le nom de fichier complet ou juste le préfixe dont vous êtes raisonnablement sûr qu'il ne contiendra aucun autre fichier.
Ajouter .dockerignore fonctionne pour moi . Un point supplémentaire Ceux qui essayent cette solution sur Windows, Windows ne vous laissera pas créer le fichier .dockerignore} créer un fichier commençant par.)
le truc à cela est mentionné ici: https://www.hanselman.com/blog/HowToCreateAFileWithADrefPrefixInWindowsExplorer.aspx
qui comprend également un point de fin, tel que: .dockerignore.
et appuyez sur Entrée (à condition que vous ayez activé les options d’extension de vue à partir des options de dossier).