Para alterar um bind mount do Compose com segurança no macOS, primeiro identifique a pasta existente no host e o caminho no contêiner que ela atende. Copie os arquivos para a nova pasta do Mac antes de editar o Compose, depois verifique o ponto de montagem resolvido e recrie o serviço afetado. Um bind mount aponta para um caminho do host; alterar esse caminho não move nem exclui os arquivos originais. A documentação de bind mount do Docker também explica que uma montagem pode ocultar arquivos já presentes no seu destino dentro do contêiner.

Saiba quais arquivos a montagem controla

Um bind mount do Compose conecta um caminho no seu Mac a um caminho dentro de um contêiner. Por exemplo, ./data:/var/lib/example disponibiliza o diretório data ao lado do arquivo do Compose dentro do contêiner em /var/lib/example. Gravações feitas pelo contêiner nessa montagem podem alterar arquivos do Mac, pois os bind mounts são de leitura e escrita por padrão. A pasta do Mac é o dado que você precisa preservar; o destino no contêiner é onde a aplicação espera encontrá-lo.

Isso é diferente de um volume nomeado, como db-data:/var/lib/example. Um volume nomeado é armazenado e gerenciado pelo Docker, enquanto um bind mount usa um diretório do host. Mudar de um para o outro é uma migração de armazenamento, não apenas uma edição de caminho. Não presuma que recriar um contêiner copiará arquivos entre eles. A documentação de armazenamento do Docker descreve essa distinção.

Copie os arquivos existentes para a nova pasta do Mac

Antes de alterar o arquivo do Compose, pare o serviço se houver a possibilidade de ele gravar dados. No Terminal, execute docker compose stop app, substituindo app pelo nome do serviço no Compose. Isso reduz a chance de as pastas antiga e nova divergirem enquanto você copia. Verifique o arquivo do Compose e eventuais arquivos de sobreposição (overrides) para confirmar a origem e o destino atuais exatos; evite adivinhar apenas pelo diretório visível de um contêiner.

Por exemplo, se a origem atual for ~/Projects/Old App/data e a nova origem deva ser ~/Projects/New App/data, crie o destino e copie o conteúdo com o comando padrão rsync do macOS:

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

As barras finais significam "copie o conteúdo deste diretório". As aspas protegem os espaços nesses caminhos de exemplo contra o shell padrão do macOS, o zsh. Esse comando mescla os arquivos no destino e não exclui arquivos que existam apenas no destino. Inspecione o destino antes de continuar. Se os dados forem importantes, mantenha também um backup independente; uma cópia não substitui um backup.

Atualize o bind mount e proteja-se contra erros de digitação

Prefira a sintaxe longa do Compose para uma montagem de diretório quando quiser que um caminho de origem inexistente impeça a inicialização em vez de se transformar silenciosamente em uma pasta vazia:

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

Aqui, ./data é resolvido em relação ao diretório pai do arquivo do Compose para uma execução local do Compose. Altere-o para o caminho do Mac desejado (relativo ou absoluto), mas mantenha o target inalterado se a aplicação precisar continuar usando /var/lib/example. A sintaxe curta do Compose cria um diretório no host quando sua origem não existe; a sintaxe longa com create_host_path: false evita esse comportamento de contingência. Consulte a referência de serviços do Compose.

Se você escolher um caminho absoluto com espaços, coloque a string YAML entre aspas, por exemplo, source: "/Users/sam/Projects/New App/data". Substitua sam pelo nome real do diretório pessoal (home) da sua conta no Mac. Mantenha o caminho de origem no YAML como um caminho literal; as regras de escape do shell se aplicam a comandos do Terminal, não a valores do YAML.

Verifique o caminho resolvido e recrie o serviço

A partir do diretório que contém o arquivo do Compose, inspecione a configuração que o Compose usará:

docker compose config

Verifique se a origem do bind mount do serviço app é resolvida para a nova pasta e se o destino continua sendo /var/lib/example. Se você usa múltiplos arquivos Compose, lembre-se de que os caminhos são baseados no primeiro arquivo especificado; a referência da CLI do Compose documenta esse comportamento. Se a origem resolvida for inesperada, pare e corrija o arquivo antes de iniciar os contêineres.

Recrie o serviço para que o contêiner em execução receba a montagem alterada:

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

O Compose documenta que o up recria os contêineres quando a configuração muda, e a opção --force-recreate torna isso explícito. Confirme se o serviço está em execução e, em seguida, verifique os arquivos ou dados esperados pela aplicação antes de remover ou renomear a pasta antiga. O diretório antigo permanece no seu Mac, a menos que você mesmo o exclua. Mantenha-o até confirmar que a nova origem está correta e que a aplicação está se comportando como esperado.

Se a montagem falhar no Docker Desktop para Mac

O Docker Desktop executa contêineres em uma máquina virtual Linux e faz a mediação do acesso aos arquivos do Mac. Seus diretórios compartilhados padrão incluem /Users, /Volumes, /private, /tmp e /var/folders; uma origem fora dos locais compartilhados disponíveis pode precisar ser adicionada em Settings > Resources > File sharing no Docker Desktop. A documentação de configurações do Docker Desktop descreve esse controle e observa que as permissões de arquivo ainda são relevantes.

Uma falha na montagem deve motivar uma verificação de caminho e de compartilhamento, não a exclusão da cópia antiga. Se o novo diretório estiver vazio, verifique o source resolvido, se a cópia posicionou os arquivos no nível de diretório correto e se o Docker Desktop consegue acessar esse local no Mac. Não use docker compose down -v como uma etapa de correção do bind mount: isso é desnecessário para alterar a origem de um bind mount e pode remover volumes nomeados usados pelo projeto.

A finalização segura é simples: verifique se a nova pasta do Mac contém os arquivos necessários, confirme se o Compose faz a resolução para essa pasta e para o destino esperado no contêiner e, por fim, teste o serviço recriado antes de descartar a cópia original.

Fontes