Para cambiar un bind mount de Compose de forma segura en macOS, primero identifique la carpeta existente en el host y la ruta del contenedor a la que da servicio. Copie los archivos a la nueva carpeta de Mac antes de editar Compose, luego verifique el montaje resuelto y vuelva a crear el servicio afectado. Un bind mount apunta a una ruta del host; cambiar esa ruta no mueve ni elimina los archivos originales. La documentación sobre bind mounts de Docker también explica que un montaje puede ocultar archivos que ya estén presentes en su destino dentro del contenedor.

Sepa qué archivos controla el montaje

Un bind mount de Compose conecta una ruta de su Mac con una ruta dentro de un contenedor. Por ejemplo, ./data:/var/lib/example hace que el directorio data situado junto al archivo de Compose esté disponible dentro del contenedor en /var/lib/example. Las operaciones de escritura realizadas por el contenedor en ese montaje pueden modificar archivos del Mac, ya que los bind mounts son de lectura y escritura de forma predeterminada. La carpeta del Mac son los datos que necesita conservar; el destino dentro del contenedor es donde la aplicación espera encontrarlos.

Esto es diferente de un volumen con nombre (named volume) como db-data:/var/lib/example. Un volumen con nombre es almacenado y gestionado por Docker, mientras que un bind mount utiliza un directorio del host. Cambiar uno por el otro implica una migración de almacenamiento, no simplemente una edición de ruta. No asuma que volver a crear un contenedor copiará archivos entre ellos. La documentación de almacenamiento de Docker describe esta distinción.

Copie los archivos existentes a la nueva carpeta de Mac

Antes de modificar el archivo de Compose, detenga el servicio si este pudiera escribir en los datos. Desde la Terminal, ejecute docker compose stop app, sustituyendo app por el nombre del servicio de Compose. Esto reduce la posibilidad de que las carpetas antigua y nueva diverjan mientras realiza la copia. Revise el archivo de Compose y cualquier archivo de anulación (overrides) para confirmar con exactitud el origen y el destino actuales; evite guiarse solo por el directorio visible de un contenedor.

Por ejemplo, si el origen actual es ~/Projects/Old App/data y el nuevo origen debe ser ~/Projects/New App/data, cree el destino y copie el contenido con el comando estándar rsync de macOS:

mkdir -p "$HOME/Projects/New App/data"
rsync -a "$HOME/Projects/Old App/data/" "$HOME/Projects/New App/data/"

Las barras inclinadas finales significan «copiar el contenido de este directorio». Las comillas protegen los espacios de estas rutas de ejemplo frente a la shell predeterminada de macOS, zsh. Este comando fusiona los archivos en el destino y no elimina los archivos que solo existan en el destino. Inspeccione el destino antes de continuar. Si los datos son importantes, mantenga también una copia de seguridad independiente; una simple copia no la reemplaza.

Actualice el bind mount y protéjase frente a errores tipográficos

Es preferible utilizar la sintaxis larga de Compose para el montaje de un directorio cuando desee que una ruta de origen inexistente detenga el inicio en lugar de convertirse de forma silenciosa en una carpeta vacía:

services:
  app:
    volumes:
      - type: bind
        source: ./data
        target: /var/lib/example
        bind:
          create_host_path: false

Aquí, ./data se resuelve de forma relativa al directorio principal del archivo de Compose para un entorno de ejecución local de Compose. Cámbielo a la ruta relativa o absoluta de Mac prevista, pero mantenga el mismo target si la aplicación debe seguir utilizando /var/lib/example. La sintaxis corta de Compose crea un directorio en el host cuando no se encuentra su origen; la sintaxis larga con create_host_path: false evita ese comportamiento predeterminado. Consulte la referencia de servicios de Compose.

Si elige una ruta absoluta con espacios, entrecomille la cadena de YAML, por ejemplo source: "/Users/sam/Projects/New App/data". Sustituya sam por el nombre real del directorio de inicio de su cuenta de Mac. Mantenga la ruta de origen en YAML como una ruta literal; las reglas de entrecomillado de la shell se aplican a los comandos de Terminal, no a los valores de YAML.

Compruebe la ruta resuelta y luego vuelva a crear el servicio

Desde el directorio que contiene el archivo de Compose, inspeccione la configuración que utilizará Compose:

docker compose config

Compruebe que el origen del bind mount del servicio app se resuelva hacia la nueva carpeta y que su destino siga siendo /var/lib/example. Si utiliza varios archivos de Compose, recuerde que las rutas se basan en el primer archivo especificado; la referencia de la CLI de Compose documenta este comportamiento. Si el origen resuelto no es el esperado, deténgase y corrija el archivo antes de iniciar los contenedores.

Vuelva a crear el servicio para que el contenedor en ejecución aplique el montaje modificado:

docker compose up -d --force-recreate app
docker compose ps app

Compose documenta que up vuelve a crear los contenedores cuando cambia la configuración, y --force-recreate lo hace explícito. Confirme que el servicio se esté ejecutando y luego verifique los archivos o datos esperados por la aplicación antes de eliminar o renombrar la carpeta antigua. El directorio antiguo permanecerá en su Mac a menos que usted mismo lo elimine. Consérvelo hasta que haya confirmado que el nuevo origen es correcto y que la aplicación funciona como se espera.

Si el montaje falla en Docker Desktop para Mac

Docker Desktop ejecuta contenedores en una máquina virtual Linux e intermedia el acceso a los archivos de Mac. Sus directorios compartidos predeterminados incluyen /Users, /Volumes, /private, /tmp y /var/folders; es posible que deba agregar cualquier origen situado fuera de las ubicaciones compartidas disponibles en Settings > Resources > File sharing de Docker Desktop. La documentación sobre la configuración de Desktop de Docker describe este control y señala que los permisos de archivo siguen siendo relevantes.

Un montaje fallido debe motivar una verificación de la ruta y de los permisos para compartir, no la eliminación de la copia antigua. Si el nuevo directorio está vacío, verifique el source resuelto, si la copia colocó los archivos en el nivel de directorio deseado y si Docker Desktop puede acceder a esa ubicación de Mac. No use docker compose down -v como un paso para reparar un bind mount: es innecesario para cambiar el origen de un bind mount y puede eliminar volúmenes con nombre utilizados por el proyecto.

El proceso seguro para concluir es simple: verifique que la nueva carpeta de Mac contenga los archivos requeridos, confirme que Compose resuelva esa carpeta y el destino esperado en el contenedor, y luego pruebe el servicio recreado antes de descartar la copia original.

Fuentes