¿Cómo copiar varios archivos en una capa usando un Dockerfile?


El siguiente Dockerfile contiene cuatro COPY capas:

COPY README.md ./
COPY package.json ./
COPY gulpfile.js ./
COPY __BUILD_NUMBER ./

¿Cómo copiar estos archivos usando una capa en su lugar? Se intentó lo siguiente:

COPY [
    "__BUILD_NUMBER ./",
    "README.md ./",
    "gulpfile ./",
    "another_file ./",
]
 118
Author: 030, 2015-05-15

3 answers

COPY README.md package.json gulpfile.js __BUILD_NUMBER ./

O

COPY ["__BUILD_NUMBER", "README.md", "gulpfile", "another_file", "./"]

También puede usar caracteres comodín en la especificación sourcefile. Ver los documentos para un poco más de detalle.

Los Directorios son especiales! Si escribes

COPY dir1 dir2 ./

Que en realidad funciona como

COPY dir1/* dir2/* ./

Si desea copiar varios directorios (no su contenido) bajo un directorio de destino en un solo comando, deberá configurar el contexto de compilación para que sus directorios de origen estén bajo un padre común y luego COPY ese padre.

 188
Author: Nathaniel Waisbrot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-07 22:04:00
COPY <all> <the> <things> <last-arg-is-destination>

Pero aquí hay un extracto importante de los documentos:

Si tiene varios pasos de Dockerfile que usan archivos diferentes de su contexto, COPIARLOS individualmente, en lugar de todos a la vez. Este asegura que la caché de compilación de cada paso solo se invalida (forzando paso a ejecutar de nuevo) si cambian los archivos requeridos específicamente.

Https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#add-or-copy

 4
Author: stofstik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-12 11:47:28

Simple

COPY README.md  package.json gulpfile.js __BUILD_NUMBER ./

Del documento

Si se especifican múltiples recursos, ya sea directamente o debido a el uso de un comodín, entonces debe ser un directorio, y debe termina con una barra /.

 3
Author: Edwin Ikechukwu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-02 13:35:32