Copier un Dockerfile a tiré le node_modules de l'hôte
Docker resolves .dockerignore by the Dockerfile's own name and path, so building a copied Dockerfile with -f ignored the rules and tried to COPY host node_modules.
Deux copies ont divergé
Une idée tenue à la main à deux endroits — schéma et migration, dev et prod, app et app.
Je voulais tester la construction du stage prod sans toucher au vrai fichier, alors je l'ai copié dans un dossier scratch et construit avec -f. Ça a échoué à COPY . . avec cannot copy to non-directory: .../node_modules/@aws-sdk/client-s3, ce qui est une erreur étrange pour copier du code source.
Docker matche .dockerignore par le nom et le chemin du Dockerfile : <name>.dockerignore à côté, ou un repli à la racine du contexte. Le vrai Backend.Dockerfile.dockerignore (qui exclut node_modules) est à côté du vrai fichier. Ma copie n'avait aucun fichier ignore correspondant à son nouveau chemin et Backend/ n'a pas de repli, donc COPY . . a tiré le vrai node_modules de l'hôte — le store de pnpm, plein de symlinks pointant hors du contexte de build — par-dessus celui que le build venait d'installer.
Arrêté de le copier et ajouté des lignes ARG/ENV temporaires au vrai fichier à la place. Les règles d'ignore d'un Dockerfile sont une propriété de son chemin, pas de son contenu, et le déplacer les détache silencieusement.