run - docker tag example
Copia directorios múltiples con un comando (2)
¿Hay alguna forma de copiar varios directorios en un solo comando, para reducir el número de capas? Por ejemplo, en lugar de:
COPY dirone ./dirone
COPY dirtwo ./dirtwo
COPY dirthree ./dirthree
Quiero hacer:
COPY dirone/ dirtwo/ dirthree/ ./
Sin embargo, esto copia el contenido de los directorios ... pero quiero copiar los directorios en sí .
Como respondió BMitch , ese es el comportamiento esperado de COPY.
Una alternativa sería ADD
los contenidos de un tarball.
Crear el tarball inicial
tar -cvf dirs.tar dirone/ dirtwo/ dirthree/
Añadirlo a la compilación
FROM busybox
ADD dirs.tar /
CMD find /dirone /dirtwo /dirthree
El tarball se extrae automáticamente.
○ →docker run c28f96eadd58
/dirone
/dirone/one
/dirtwo
/dirtwo/two
/dirthree
/dirthree/three
Tenga en cuenta que cada vez que actualice el archivo tar, estará invalidando la memoria caché de compilación de Docker para ese paso. Si está tratando con una gran cantidad de archivos, querrá ser inteligente cuando haga tar -c
. También puede usar tar -u
si puede tratar con archivos que no se eliminan automáticamente del archivo.
[ -f dirs.tar ] && tar -uf dirs.tar something || tar -cf dirs.tar something
Ese es el comportamiento documentado del comando de copia:
Si
<src>
es un directorio, se copia todo el contenido del directorio, incluidos los metadatos del sistema de archivos.Nota: el directorio en sí no se copia, solo su contenido.
La mejor solución alternativa que puedo sugerir es cambiar el diseño del directorio en la carpeta de compilación, mover las tres carpetas en una carpeta principal y agregar la principal.