tag run imagenes imagen hub example crear docker copy dockerfile

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.