En un Dockerfile, tengo
COPY . .
Quiero excluir un directorio completo, en mi caso, el directorio node_modules.
Algo como esto:
COPY [all but **/node_modules/**] .
¿Es esto posible con Docker?
docker
dockerfile
docker-copy
Alexander Mills
fuente
fuente
.dockerignore
?Respuestas:
Cree un archivo
.dockerignore
en el directorio de contexto de compilación de Docker (por lo que, en este caso, lo más probable es que sea un directorio principal de node_modules) con una línea:aunque probablemente solo quieras:
Información sobre dockerignore: https://docs.docker.com/engine/reference/builder/#dockerignore-file
fuente
/config/nginx/ /config/logstash/
encuentro esto en el contenedor bash:ls config/ gunicorn logs logstash nginx
ls /config/
, ¿intentaste agregar esas rutas a tu .dockerignore sin el encabezado/
?node_modules
no funciona en subdirectorios.Para aquellos que no pueden usar un archivo .dockerignore (por ejemplo, si necesita el archivo en una COPIA pero no en otra):
Sí, pero necesita múltiples instrucciones de COPIA. Específicamente, necesita una COPIA para cada letra en el nombre de archivo que desea excluir.
Continuar hasta que tenga el nombre completo del archivo, o solo el prefijo, está razonablemente seguro de que no tendrá ningún otro archivo.
fuente
COPY failed: no source files were specified
cuando no haya archivos que comiencen con 'no', pero no 'asentir'.src/
irá a/var/www
e/conf/nginx.conf
ir a/etc/nginx/conf.d/default.conf
. Además, puede copiar todo yRUN rm -r conf
más tarde (también mantener el árbol de origen como estaba). Me gustaría saber si alguien tiene otra sugerencia.COPY [^node_modules]*
para copiar todos los archivos de nivel superior.En mi caso, mi Dockerfile contenía un paso de instalación, que produjo el
vendor
directorio (el equivalente de PHPnode_modules
). LuegoCOPY
este directorio a la imagen final de la aplicación. Por lo tanto, no pude ponervendor
en mi.dockerignore
. Mi solución fue simplemente eliminar el directorio antes de realizarcomposer install
(el equivalente PHP denpm install
).Esta solución funciona y no hincha la imagen final, pero no es ideal, porque el
vendor
directorio en el host se copia en el contexto de Docker durante el proceso de compilación, lo que agrega tiempo.fuente
composer.lock
antescomposer install
. Sin el archivo de bloqueo, se puede instalar un conjunto diferente de dependencias (la carpeta del proveedor) la próxima vez que compile.Agregar .dockerignore funciona para mí. Un punto adicional Aquellos que están probando esta solución en Windows , Windows no le permitirá crear un archivo .dockerignore (ya que no lo hace de forma predeterminada, permite crear un archivo que comienza con).
Para crear dicho archivo comenzando con. en Windows , incluya también un punto final, como:
.dockerignore.
y presione enter (siempre que haya habilitado las opciones de vista de extensión desde las opciones de carpeta)fuente
Excluyendo node_modules del directorio actual
Excluyendo node_modules en cualquier subdirectorio inmediato
Aquí están los documentos oficiales.
fuente