En una Mac con Docker Desktop, haga una copia de seguridad de un volumen con nombre de Compose montándolo en un contenedor temporal y escribiendo un archivo tar en una carpeta de su Mac. Verifique el nombre del volumen, detenga los servicios que escriben en él, cree el archivo y confirme que el archivo existe antes de eliminar los contenedores. Un docker compose down normal mantiene los volúmenes con nombre; docker compose down --volumes elimina los volúmenes del proyecto correspondientes, así que no lo ejecute hasta que la copia de seguridad se haya completado.
1. Identificar el volumen de Compose y su ruta de montaje
En la Terminal, vaya al directorio que contiene el archivo de Compose del proyecto. Busque el montaje del servicio, como db-data:/var/lib/postgresql/data, y su declaración de nivel superior coincidente bajo volumes:. El lado izquierdo, db-data, es la clave de Compose; la ruta del contenedor después de los dos puntos es donde la aplicación ve los datos. Compose puede crear el volumen real de Docker con un prefijo de proyecto, mientras que un name: configurado puede darle un nombre personalizado. La referencia de volúmenes de Compose de Docker describe estas reglas de nomenclatura.
Enumere los volúmenes utilizados por el proyecto Compose actual:
docker compose volumes
Use esa salida y el archivo de Compose para identificar el volumen exacto de Docker. Si el proyecto utiliza varios archivos de Compose, perfiles o un nombre de proyecto personalizado, use las mismas opciones al inspeccionarlo que cuando se inició el stack. No adivine el nombre real del volumen basándose únicamente en la clave del YAML. docker volume ls puede mostrar todos los volúmenes de Docker, pero puede incluir proyectos no relacionados.
2. Detener las escrituras antes de crear el archivo
Un archivo del sistema de archivos no es necesariamente una copia de seguridad coherente de la base de datos si esta cambia mientras se copian los archivos. Primero, detenga la aplicación de forma limpia; para un stack de Compose, docker compose stop detiene sus servicios mientras conserva los contenedores y los volúmenes. Si la base de datos cuenta con un procedimiento de volcado o copia de seguridad específico de la aplicación, utilícelo cuando la coherencia a nivel de transacción sea importante; luego, cree también un archivo del volumen si necesita una copia a nivel de archivos.
Evite docker compose down --volumes en esta etapa. La documentación de Compose indica que down elimina los contenedores y las redes del proyecto por defecto, mientras que --volumes también elimina los volúmenes con nombre y anónimos aptos para eliminación. Los volúmenes externos no se eliminan con down. La referencia de compose down de Docker explica esta distinción.
3. Crear una copia de seguridad tar en una carpeta de Mac
El siguiente ejemplo asume que el volumen real de Docker se llama myproject_db-data. Reemplace ese valor con el nombre exacto que identificó. Guarda db-data-backup.tar en el directorio actual de la Mac. Docker Desktop ejecuta el Docker Engine dentro de una máquina virtual (VM) de Linux, por lo que los datos de un volumen con nombre son administrados por Docker; este método los copia a través de un contenedor temporal en lugar de depender de una ruta de almacenamiento de la VM de Linux. La guía de volúmenes de Docker documenta el enfoque con un contenedor auxiliar y tar, y la documentación de configuración de Mac de Docker Desktop describe la VM de Linux y el uso compartido de archivos con el host.
volume_name='myproject_db-data'
backup_dir="$PWD"
backup_file='db-data-backup.tar'
docker run --rm \
--mount "type=volume,source=$volume_name,target=/source,readonly" \
--mount "type=bind,source=$backup_dir,target=/backup" \
alpine sh -c 'tar -C /source -cf "/backup/'"$backup_file"'" .'
El archivo tar se escribe en el directorio representado por $PWD, por lo que debe elegir una ubicación con suficiente espacio libre antes de ejecutar el comando. El volumen se monta como solo lectura en el contenedor auxiliar para evitar cambios accidentales durante la copia; esto por sí solo no impide que otros contenedores escriban, razón por la cual es importante detener primero los procesos que escriben. El comando requiere que Docker Desktop esté en ejecución y que la carpeta de la Mac esté accesible para montajes de tipo bind (bind mounts). Si el montaje falla, verifique el acceso para compartir archivos de Docker Desktop para esa carpeta.
Compruebe que el archivo exista y tenga un tamaño plausible distinto de cero:
ls -lh "$backup_file"
Esto confirma que se creó un archivo, no que su contenido forme una copia de seguridad restaurable de la aplicación. Mantenga el archivo tar en un lugar fuera del volumen administrado por Docker y considere copiarlo a su destino habitual de copias de seguridad antes de eliminar datos.
4. Eliminar contenedores solo después de verificar su objetivo
Cuando el archivo esté en su lugar, elimine los contenedores del proyecto con:
docker compose down
Esto deja el volumen con nombre intacto por defecto. Si su intención es también eliminar el volumen, primero verifique nuevamente los nombres del proyecto y del volumen, y luego use docker compose down --volumes solo cuando esté listo para eliminar esos datos. Un volumen con nombre personalizado o externo puede tener un comportamiento de ciclo de vida diferente; consulte la definición de Compose y la referencia de comandos de Docker en lugar de asumir que la opción afecta a todos los volúmenes.
Consideraciones sobre la restauración
El flujo de trabajo de volúmenes documentado por Docker restaura un archivo tar montando el volumen de destino y extrayendo el archivo en él. Para archivos de bases de datos, restaure en un volumen nuevo o vaciado intencionalmente mientras el servicio de la base de datos está detenido, y siga los requisitos de propiedad e inicialización de la imagen de la base de datos. No extraiga sobre un volumen que contenga datos que aún necesita: los archivos existentes pueden entrar en conflicto con el archivo tar, y una extracción de tar no es una estrategia de fusión segura. Si necesita un punto de recuperación coherente para la base de datos, utilice el propio proceso de copia de seguridad y restauración de la base de datos, además de o en lugar de un archivo en bruto de los datos.
Fuentes
docker compose down — Docker
Volumes — Docker
Change your Docker Desktop settings — Docker