Existe-t-il un moyen de copier plusieurs répertoires dans une seule commande, afin de réduire le nombre de couches? Par exemple, au lieu de:
COPY dirone ./dirone
COPY dirtwo ./dirtwo
COPY dirthree ./dirthree
Je veux faire:
COPY dirone/ dirtwo/ dirthree/ ./
Cependant, cela copie le conten des répertoires ... mais je veux copier les répertoires eux-mêmes.
C'est le comportement documenté de la commande copy:
Si
<src>
est un répertoire, tout le contenu du répertoire est copié, y compris les métadonnées du système de fichiers.Remarque: le répertoire lui-même n'est pas copié, juste son contenu.
La meilleure solution de contournement que je puisse suggérer est de modifier la disposition de votre répertoire dans votre dossier de génération, de déplacer les trois dossiers sous un dossier parent et d'ajouter le parent.
Comme BMitch a répond , c'est le comportement COPY attendu.
Une alternative serait de ADD
le contenu d'une archive tar.
Créer le tarball initial
tar -cvf dirs.tar dirone/ dirtwo/ dirthree/
Ajoutez-le à la build
FROM busybox
ADD dirs.tar /
CMD find /dirone /dirtwo /dirthree
L'archive tar est automatiquement extraite
○ →docker run c28f96eadd58
/dirone
/dirone/one
/dirtwo
/dirtwo/two
/dirthree
/dirthree/three
Notez que chaque fois que vous mettez à jour le fichier tar, vous invalidez le cache de construction Docker pour cette étape. Si vous traitez un grand nombre de fichiers, vous voudrez peut-être être intelligent lorsque vous effectuez la tar -c
. Vous pouvez également utiliser tar -u
si vous pouvez gérer les fichiers qui ne sont pas supprimés automatiquement de l'archive tar.
[ -f dirs.tar ] && tar -uf dirs.tar something || tar -cf dirs.tar something