In einer Docker-Datei habe ich
COPY . .
Ich möchte ein ganzes Verzeichnis ausschließen, in meinem Fall das Verzeichnis node_modules.
Etwas wie das:
COPY [all but **/node_modules/**] .
Ist das mit Docker möglich?
docker
dockerfile
docker-copy
Alexander Mills
quelle
quelle
.dockerignore
?Antworten:
Erstellen Sie eine Datei
.dockerignore
in Ihrem Docker-Build-Kontextverzeichnis (in diesem Fall also höchstwahrscheinlich ein Verzeichnis, das node_modules übergeordnet ist) mit einer Zeile darin:obwohl du wahrscheinlich nur willst:
Informationen zu Dockerignore: https://docs.docker.com/engine/reference/builder/#dockerignore-file
quelle
/config/nginx/ /config/logstash/
Ich finde das in der Container-Bash:ls config/ gunicorn logs logstash nginx
ls /config/
, haben Sie versucht, diese Pfade zu Ihrem .dockerignore hinzuzufügen, ohne den führenden/
?node_modules
nicht in Unterverzeichnissen.Für diejenigen, die keine .dockerignore-Datei verwenden können (z. B. wenn Sie die Datei in einer KOPIE, aber nicht in einer anderen benötigen):
Ja, aber Sie benötigen mehrere COPY-Anweisungen. Insbesondere benötigen Sie eine KOPIE für jeden Buchstaben im Dateinamen, den Sie ausschließen möchten.
Fahren Sie fort, bis Sie den vollständigen Dateinamen oder nur das Präfix haben, von dem Sie ziemlich sicher sind, dass es keine anderen Dateien mehr gibt.
quelle
COPY failed: no source files were specified
wenn es keine Dateien gibt, die mit 'nein' beginnen, aber nicht mit 'nicken'.src/
zu/var/www
und/conf/nginx.conf
gehen würde/etc/nginx/conf.d/default.conf
. Sie können auch alles kopieren undRUN rm -r conf
später (auch den Quellbaum so lassen, wie er war). Ich würde gerne hören, ob jemand einen anderen Vorschlag hat.In meinem Fall enthielt meine Docker-Datei einen Installationsschritt, der das
vendor
Verzeichnis (das PHP-Äquivalent vonnode_modules
) erzeugte . Ich übergebe dannCOPY
dieses Verzeichnis zum endgültigen Anwendungsbild. Daher konnte ichvendor
meine nicht einsetzen.dockerignore
. Meine Lösung bestand einfach darin, das Verzeichnis vor der Ausführung zu löschencomposer install
(das PHP-Äquivalent vonnpm install
).Diese Lösung funktioniert und bläht das endgültige Image nicht auf, ist jedoch nicht ideal, da das
vendor
Verzeichnis auf dem Host während des Erstellungsprozesses in den Docker-Kontext kopiert wird, was die Zeit verlängert.quelle
composer.lock
bevorcomposer install
. Ohne die Sperrdatei wird beim nächsten Erstellen möglicherweise ein anderer Satz von Abhängigkeiten (der Herstellerordner) installiert.Das Hinzufügen von .dockerignore funktioniert für mich. Ein zusätzlicher Punkt Wenn Sie diese Lösung unter Windows oder Windows ausprobieren, können Sie keine .dockerignore-Datei erstellen Sie keine (da dies standardmäßig nicht das Erstellen von Dateien ab.) Ermöglicht.
So erstellen Sie eine solche Datei beginnend mit. unter Windows , auch eine Endung Punkt, wie:
.dockerignore.
und drücken Sie die Eingabetaste (vorausgesetzt , Sie sehen Erweiterung Optionen von Ordneroptionen aktiviert haben)quelle
Knoten_Module aus dem aktuellen Verzeichnis ausschließen
Ausschluss von node_modules in unmittelbaren Unterverzeichnissen
Hier sind die offiziellen Dokumente
quelle