Para un proyecto local de Docker en macOS, utilice un bind mount cuando necesite editar o inspeccionar los mismos archivos en macOS y en un contenedor; utilice un volumen con nombre cuando el contenedor deba ser el propietario de datos persistentes, como una base de datos o una caché. La prueba práctica consiste en saber si necesita acceso directo a los archivos en Finder o en una aplicación de Mac. En caso afirmativo, monte la carpeta específica del proyecto mediante bind mount. Si no es así, mantenga los datos en un volumen con nombre administrado por Docker.
¿Qué cambia entre los dos tipos de montaje?
Un bind mount conecta una ruta en su Mac con una ruta dentro de un contenedor. Los cambios son visibles desde ambos lados, lo que resulta útil para el código fuente, la configuración y los archivos generados que desea conservar en la carpeta de su proyecto. Un volumen con nombre es almacenado y administrado por Docker, y se adjunta a un contenedor en una ruta elegida. Docker recomienda los volúmenes para datos persistentes del contenedor y cuando el host no necesita acceso directo a los archivos. La documentación sobre bind mounts de Docker y la documentación sobre volúmenes describen estas diferencias.
| Sus datos | Opción habitual | Motivo |
|---|---|---|
| Archivos fuente que edita en un IDE de Mac | Bind mount | Mac y el contenedor acceden a los archivos del proyecto. |
| El directorio de datos de una base de datos | Volumen con nombre | Docker gestiona los datos persistentes del contenedor sin compartir cada archivo de la base de datos a través de macOS. |
| Salida que desea abrir o usar con herramientas de Mac | Bind mount | La salida aparece en la ruta seleccionada de Mac. |
| Estado temporal que se puede descartar | Ninguno de los dos por defecto | Evalúe si los datos realmente necesitan persistencia; un volumen con nombre permanece tras eliminar el contenedor a menos que lo borre por separado. |
Por qué macOS hace que esta elección sea importante
Docker Desktop ejecuta contenedores de Linux dentro de una máquina virtual de Linux, por lo que actúa como intermediario en el acceso entre el sistema de archivos de Mac y los contenedores. La documentación de configuración de Docker indica que compartir archivos del host añade sobrecarga; compartir demasiados archivos puede aumentar la carga de la CPU y ralentizar las operaciones del sistema de archivos. Recomienda específicamente mantener los elementos que no sean código, como cachés y bases de datos, en un volumen de datos cuando el rendimiento sea prioritario. Configuración de Docker Desktop
Esa directriz no significa que todos los bind mounts vayan a ser lentos. Significa que el tipo de datos y el flujo de trabajo que observe son importantes. El árbol de código fuente de un proyecto es un candidato natural para un bind mount porque el objetivo es editar en el Mac. Por lo general, no es necesario explorar en Finder los numerosos archivos cambiantes de una base de datos, por lo que un volumen con nombre es un mejor punto de partida. Para repositorios inusualmente grandes, Docker Desktop también documenta las carpetas compartidas sincronizadas (Synchronized file shares) como una opción limitada por suscripción que puede mejorar el rendimiento del bind mount; esto cambia el comportamiento al compartir archivos, no la distinción básica entre código fuente visible en el host y un volumen gestionado por Docker. Synchronized file shares
Configurar una carpeta de proyecto y un volumen de base de datos
Desde la Terminal, desplácese al directorio de su proyecto y utilice un bind mount para el código. Este ejemplo monta la carpeta actual en /workspace dentro de un contenedor Alpine desechable; sustituya la imagen o el comando según convenga para su contenedor de desarrollo.
docker run --rm -it \
--mount "type=bind,source=$PWD,target=/workspace" \
alpine:latest sh
En las shells predeterminadas de macOS, $PWD se expande al directorio actual. Entrecomillar el argumento de montaje completo mantiene unida la ruta del host expandida si el nombre de una carpeta contiene espacios. La sintaxis --mount de Docker es explícita. La ruta del host debe existir: Docker documenta que, de forma predeterminada, una ruta de origen inexistente hace que --mount falle. Un bind mount permite escritura a menos que se marque como de solo lectura, por lo que un proceso del contenedor puede modificar archivos en el directorio montado de Mac. Utilice readonly cuando el contenedor solo necesite leer el proyecto. Opciones y comportamiento de bind mounts
Para los datos que pertenecen al contenedor, cree y adjunte en su lugar un volumen con nombre. Este comando inicia PostgreSQL con un volumen en su directorio de datos estándar:
docker volume create project-db
docker run --name project-postgres \
--mount type=volume,source=project-db,target=/var/lib/postgresql/data \
-e POSTGRES_PASSWORD='local-dev-only' \
-d postgres:17
Aquí project-db es el nombre del volumen persistente, y POSTGRES_PASSWORD es un ajuste ilustrativo para desarrollo local, no un patrón de gestión de secretos para producción. Eliminar el contenedor no elimina automáticamente un volumen con nombre. Dicha persistencia facilita el reemplazo del contenedor, pero también implica que los datos antiguos pueden permanecer y que una nueva ejecución podría reutilizarlos. Tome nota del nombre del volumen y de la configuración del contenedor necesaria para volver a conectarse a él.
Comprobar la visibilidad, la portabilidad y la limpieza
Antes de elegir, pregúntese: ¿abriré o editaré estos archivos exactos con software de Mac? Si es así, monte mediante bind mount la carpeta más acotada que sirva para la tarea, en lugar de compartir una sección innecesariamente amplia de su directorio de inicio. Docker señala que macOS y Linux gestionan las mayúsculas y minúsculas de los nombres de archivo de forma distinta, lo que puede revelar problemas de distinción entre mayúsculas y minúsculas dentro de un contenedor. Compruebe los nombres cuidadosamente si el proyecto se comporta de forma diferente dentro de Linux. Notas sobre el uso compartido de archivos en Docker Desktop
Si los archivos deben permanecer dentro de los límites del contenedor, elija un volumen con nombre y adminístrelo con los comandos de volumen de Docker. El volumen no es una carpeta ordinaria de Finder en la ubicación del proyecto; Docker Desktop almacena sus datos de Linux en el entorno de su máquina virtual. Trate la eliminación de un volumen como un paso de borrado de datos y haga copias de seguridad del contenido importante de los volúmenes por separado. La guía de copias de seguridad de Docker indica que las imágenes de contenedor no incluyen los cambios en el sistema de archivos almacenados en los volúmenes adjuntos. Copia de seguridad y restauración en Docker Desktop
Un bind mount depende de que la ruta del host exista, por lo que puede ser menos portable entre ordenadores Mac con diferentes estructuras de directorios. Un volumen con nombre evita esa dependencia de la ruta del proyecto, pero sus datos siguen requiriendo un plan explícito de copia de seguridad o migración. Por lo tanto, el valor predeterminado y sencillo para muchos proyectos de desarrollo en Mac es un bind mount para el código fuente y un volumen con nombre para el estado de la base de datos, documentando la ubicación de cada dato en la configuración de Compose o en las instrucciones de ejecución del proyecto.
Fuentes
Bind mounts — Docker
Volumes — Docker
Change your Docker Desktop settings — Docker
Synchronized file shares — Docker
How to back up and restore your Docker Desktop data — Docker