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.
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