Tengo un Rockerfile que construye 4 imágenes; También tengo un archivo .dockerignore
central. Para una de las imágenes, necesito activos que están bloqueados por el archivo .dockerignore
. ¿Hay alguna forma de ADD
o COPY
para forzar agregar/ignorar esta lista?
¡Será mucho más fácil hacer esto en un archivo en lugar de tres separados...!
De una manera sencilla no.
El archivo .dockerignore
se usa para filtrar lo que se usará en la compilación incluso antes de leer el Dockerfile
.
El docker daemon
no ve su carpeta de compilación, cuando comienza la compilación, todos los archivos en la carpeta de compilación de contexto se comprimen (o simplemente se empaquetan) y se envían al demonio y solo entonces leerá su Dockerfile
para compilar el contenedor con los archivos recibió
Más contenido sobre .dockerignore
: https://docs.docker.com/engine/reference/builder/#/dockerignore-file
En una compilación normal de Docker, el archivo .dockerignore
afecta el "contexto de compilación" que se empaqueta y se envía al servidor de Docker al comienzo de la compilación. Si el "contexto de compilación" no contiene los archivos, entonces no puede hacer referencia a ellos, así es como se excluyen los archivos. No "existen" para la compilación.
Rocker afirma que se ejecuta de manera diferente al no enviar un contexto de compilación al servidor. El código parece que cada paso ADD
/ COPY
está compuesto en un archivo tar que ignora los archivos . Además, el .dockerignore
se lee una vez al inicio y se almacena en caché .
Como Rocker no envía el contexto de compilación antes de cada compilación, solo filtra para cada comando ADD
/ COPY
, hay esperanza. Pero debido a que los datos ignorados se leen solo una vez al inicio, no puede hacer nada extraño como copiar diferentes archivos .dockerignore
en diferentes etapas de la compilación.
MOUNT
Una opción es continuar usando .dockerignore
tal como está y usar un comando Rocker MOUNT
para copiar manualmente los directorios ignorados. Su último ejemplo en la sección de montaje demuestra:
FROM debian:jessie ADD . /app # assets/ in .dockerignore WORKDIR /app MOUNT .:/context RUN cp -r /context/assets /app # include assets/
La única otra opción útil que se me ocurre es dividir su ADD
o COPY
en varios comandos para que no confíe en .dockerignore
para filtrar archivos a las otras 3 imágenes. Esto probablemente requerirá que su directorio de assets
se almacene fuera de la raíz de su aplicación.