Pour modifier un bind mount Compose en toute sécurité sur macOS, identifiez d'abord le dossier hôte existant et le chemin du conteneur qu'il dessert. Copiez les fichiers vers le nouveau dossier Mac avant de modifier Compose, puis vérifiez le montage résolu et recréez le service concerné. Un bind mount pointe vers un chemin hôte ; modifier ce chemin ne déplace ni ne supprime les fichiers d'origine. La documentation sur les bind mounts de Docker explique également qu'un montage peut masquer des fichiers déjà présents à son emplacement de destination dans le conteneur.

Identifier les fichiers gérés par le montage

Un bind mount Compose associe un chemin sur votre Mac à un chemin à l'intérieur d'un conteneur. Par exemple, ./data:/var/lib/example rend le répertoire data situé à côté du fichier Compose accessible dans le conteneur à l'emplacement /var/lib/example. Les écritures effectuées par le conteneur sur ce montage peuvent modifier les fichiers du Mac, car les bind mounts sont en lecture-écriture par défaut. Le dossier sur le Mac correspond aux données que vous devez préserver ; la destination dans le conteneur est l'endroit où l'application s'attend à les trouver.

Cela diffère d'un volume nommé tel que db-data:/var/lib/example. Un volume nommé est stocké et géré par Docker, tandis qu'un bind mount utilise un répertoire de l'hôte. Passer de l'un à l'autre constitue une migration de stockage, et non une simple modification de chemin. Ne supposez pas que la recréation d'un conteneur copiera les fichiers entre les deux. La documentation sur le stockage de Docker détaille cette distinction.

Copier les fichiers existants vers le nouveau dossier Mac

Avant de modifier le fichier Compose, arrêtez le service s'il est susceptible d'écrire sur les données. Depuis le Terminal, exécutez docker compose stop app, en remplaçant app par le nom du service Compose. Cela réduit le risque que l'ancien et le nouveau dossier divergent pendant la copie. Vérifiez le fichier Compose et les éventuelles surcharges pour confirmer la source et la cible actuelles exactes ; évitez de vous baser uniquement sur le répertoire visible d'un conteneur.

Par exemple, si la source actuelle est ~/Projects/Old App/data et que la nouvelle source doit être ~/Projects/New App/data, créez la destination et copiez le contenu à l'aide de la commande standard rsync de macOS :

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

Les barres obliques finales signifient « copier le contenu de ce répertoire ». Les guillemets protègent les espaces présents dans ces exemples de chemins vis-à-vis du shell par défaut de macOS, zsh. Cette commande fusionne les fichiers dans la destination et ne supprime pas les fichiers présents uniquement dans la destination. Inspectez la destination avant de poursuivre. Si les données sont importantes, conservez également une sauvegarde indépendante ; une copie ne remplace pas une sauvegarde.

Mettre à jour le bind mount et se prémunir contre les fautes de frappe

Privilégiez la syntaxe longue de Compose pour le montage d'un répertoire lorsque vous souhaitez qu'un chemin source manquant interrompe le démarrage au lieu de créer silencieusement un dossier vide :

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

Ici, ./data est résolu par rapport au répertoire parent du fichier Compose pour un runtime Compose local. Remplacez-le par le chemin Mac relatif ou absolu souhaité, mais conservez la même valeur pour target si l'application doit continuer à utiliser /var/lib/example. La syntaxe courte de Compose crée un répertoire hôte lorsque sa source est introuvable ; la syntaxe longue avec create_host_path: false évite ce comportement de repli. Consultez la référence des services Compose.

Si vous choisissez un chemin absolu comportant des espaces, entourez la chaîne YAML de guillemets, par exemple source: "/Users/sam/Projects/New App/data". Remplacez sam par le nom réel du répertoire personnel de votre compte Mac. Conservez le chemin source dans le fichier YAML en tant que chemin littéral ; les règles d'échappement du shell s'appliquent aux commandes de Terminal, pas aux valeurs YAML.

Vérifier le chemin résolu, puis recréer le service

Depuis le répertoire contenant le fichier Compose, inspectez la configuration que Compose utilisera :

docker compose config

Vérifiez que la source du montage du service app pointe bien vers le nouveau dossier et que sa cible est toujours /var/lib/example. Si vous utilisez plusieurs fichiers Compose, n'oubliez pas que les chemins sont basés sur le premier fichier spécifié ; la référence de la CLI Compose documente ce comportement. Si la source résolue n'est pas celle attendue, arrêtez-vous et corrigez le fichier avant de démarrer les conteneurs.

Recréez le service afin que le conteneur en cours d'exécution prenne en compte le montage modifié :

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

Compose documente que la commande up recrée les conteneurs lorsque la configuration change, et --force-recreate rend cette action explicite. Confirmez que le service est en cours d'exécution, puis vérifiez les fichiers ou les données attendus par l'application avant de supprimer ou de renommer l'ancien dossier. L'ancien répertoire reste sur votre Mac à moins que vous ne le supprimiez vous-même. Conservez-le jusqu'à ce que vous ayez confirmé que la nouvelle source est correcte et que l'application se comporte comme prévu.

Si le montage échoue sur Docker Desktop pour Mac

Docker Desktop exécute les conteneurs dans une machine virtuelle Linux et gère l'accès aux fichiers du Mac. Ses répertoires partagés par défaut incluent /Users, /Volumes, /private, /tmp et /var/folders ; une source située en dehors des emplacements partagés disponibles peut nécessiter d'être ajoutée dans Paramètres > Ressources > Partage de fichiers (Settings > Resources > File sharing) de Docker Desktop. La documentation des paramètres Desktop de Docker décrit cette option et rappelle que les permissions de fichiers restent importantes.

Un échec de montage doit vous inciter à vérifier le chemin et le partage, et non à supprimer l'ancienne copie. Si le nouveau répertoire est vide, vérifiez la valeur résolue de source, assurez-vous que la copie a placé les fichiers au bon niveau d'arborescence et vérifiez si Docker Desktop peut accéder à cet emplacement Mac. N'utilisez pas docker compose down -v pour tenter de corriger un bind mount : cela est inutile pour modifier la source d'un montage et risque de supprimer les volumes nommés utilisés par le projet.

La méthode sûre pour terminer est simple : vérifiez que le nouveau dossier Mac contient les fichiers requis, confirmez que Compose résout correctement ce dossier ainsi que la cible attendue dans le conteneur, puis testez le service recréé avant de vous débarrasser de la copie d'origine.

Sources