Agregue un volumen a Docker, pero excluya una subcarpeta

Resuelto Golo Roden asked hace 9 años • 13 respuestas

Supongamos que tengo un contenedor Docker y una carpeta en mi host /hostFolder. Ahora, si quiero agregar esta carpeta al contenedor Docker como un volumen, puedo hacerlo usándola ADDo Dockerfilemontándola como un volumen.

Hasta ahora, todo bien.

Ahora /hostFoldercontiene una subcarpeta, /hostFolder/subFolder.

Quiero montarlo /hostFolderen el contenedor Docker (ya sea de lectura-escritura o de solo lectura, no importa, ambos funcionan para mí), pero NO quiero incluirlo /hostFolder/subFolder. Quiero excluir esto y también quiero que el contenedor Docker pueda realizar cambios en esta subcarpeta, sin la consecuencia de que también se cambie en el host.

es posible? ¿Si es así, cómo?

Golo Roden avatar Mar 21 '15 16:03 Golo Roden
Aceptado

Usando docker-compose puedo usar node_modules localmente, pero ignórelo en el contenedor de Docker usando la siguiente sintaxis en eldocker-compose.yml

volumes:
   - './angularApp:/opt/app'
   - /opt/app/node_modules/

Entonces, todo ./angularAppse asigna /opt/appy luego creo otro volumen de montaje /opt/app/node_modules/que ahora es un directorio vacío, incluso si mi máquina local ./angularApp/node_modulesno está vacía.

kernix avatar Jun 18 '2016 15:06 kernix

Si desea que Docker-compose ignore los subdirectorios pero sean persistentes, puede hacer lo siguiente en docker-compose.yml:

volumes:
  node_modules:
services:
  server:
    volumes:
      - .:/app
      - node_modules:/app/node_modules

Esto montará su directorio actual como un volumen compartido, pero montará un volumen acoplable persistente en lugar de su node_modulesdirectorio local. Esto es similar a la respuesta de @kernix, pero permitirá node_modulespersistir entre docker-compose upejecuciones, que probablemente sea el comportamiento deseado.

Nate T avatar Jul 26 '2016 22:07 Nate T

Para aquellos que intentan lograr un flujo de trabajo agradable que node_modulesno sea anulado por el sistema local, esto podría ser útil.

  1. Cambie su docker-compose para montar un volumen persistente anónimo en node_modules para evitar que su local lo anule. Esto se ha descrito en este hilo varias veces.
services:
  server:
    build: .
    volumes:
      - .:/app
      - /app/node_modules
  1. Esta es la parte importante que nos faltaba. Cuando hagas girar tu pila usa docker-compose -V. Sin esto, si agregara un nuevo paquete y reconstruyera su imagen, estaría usando node_modulesdesde su lanzamiento inicial de Docker-Compose.
    -V, --renew-anon-volumes   Recreate anonymous volumes instead of retrieving
                               data from the previous containers.
squid_ink avatar Jul 08 '2020 16:07 squid_ink

Para excluir un archivo, utilice lo siguiente

volumes:
   - /hostFolder:/folder
   - /dev/null:/folder/fileToBeExcluded
Frank Wong avatar Nov 07 '2017 08:11 Frank Wong