webentwicklung-frage-antwort-db.com.de

Kopieren Sie mehrere Verzeichnisse mit einem Befehl

Gibt es eine Möglichkeit, mehrere Verzeichnisse in einem Befehl zu kopieren, um die Anzahl der Ebenen zu verringern? Zum Beispiel anstelle von:

COPY dirone ./dirone
COPY dirtwo ./dirtwo
COPY dirthree ./dirthree

Ich will das tun:

COPY dirone/ dirtwo/ dirthree/ ./

Dies kopiert jedoch das Inhalt der Verzeichnisse ... aber ich möchte das die Verzeichnisse selbst kopieren.

31
Claudiu

Als BMitch antwortete wird das COPY-Verhalten erwartet.

Eine Alternative wäre ADD der Inhalt eines Tarballs.

Erstellen Sie den ersten Tarball

tar -cvf dirs.tar dirone/ dirtwo/ dirthree/

Fügen Sie es dem Build hinzu

FROM busybox
ADD dirs.tar /
CMD find /dirone /dirtwo /dirthree

Der Tarball wird automatisch extrahiert

○ →docker run c28f96eadd58
/dirone
/dirone/one
/dirtwo
/dirtwo/two
/dirthree
/dirthree/three

Beachten Sie , dass Sie jedes Mal, wenn Sie die tar-Datei aktualisieren, den Docker-Build-Cache für diesen Schritt ungültig machen. Wenn Sie mit vielen Dateien zu tun haben, sollten Sie beim Ausführen von tar -c. Sie könnten auch tar -u wenn Sie mit Dateien umgehen können, die nicht automatisch aus dem Archiv gelöscht werden.

[ -f dirs.tar ] && tar -uf dirs.tar something || tar -cf dirs.tar something
9
Matt