Agregue un volumen a Docker, pero excluya una subcarpeta
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 ADD
o Dockerfile
montándola como un volumen.
Hasta ahora, todo bien.
Ahora /hostFolder
contiene una subcarpeta, /hostFolder/subFolder
.
Quiero montarlo /hostFolder
en 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?
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 ./angularApp
se asigna /opt/app
y 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_modules
no está vacía.
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_modules
directorio local. Esto es similar a la respuesta de @kernix, pero permitirá node_modules
persistir entre docker-compose up
ejecuciones, que probablemente sea el comportamiento deseado.
Para aquellos que intentan lograr un flujo de trabajo agradable que node_modules
no sea anulado por el sistema local, esto podría ser útil.
- 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
- 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 usandonode_modules
desde su lanzamiento inicial de Docker-Compose.
-V, --renew-anon-volumes Recreate anonymous volumes instead of retrieving
data from the previous containers.
Para excluir un archivo, utilice lo siguiente
volumes:
- /hostFolder:/folder
- /dev/null:/folder/fileToBeExcluded