As montagens de volume do Docker para Mac se comportam de maneira diferente do sistema Docker base. Isso ocorre principalmente porque o Docker tenta cumprir as diretrizes de sandbox do sistema de arquivos da Apple.
Conforme mostrado nas preferências do Docker, apenas alguns caminhos são exportados pelo macOS.
/Users
/Volumes
/tmp
/private
/var
no macOS é um link simbólico para /private
. Isso também é verdade para /tmp
:
$ ls -ld /tmp /var
lrwxr-xr-x@ 1 root wheel 11 Jan 26 16:18 /tmp -> private/tmp
lrwxr-xr-x@ 1 root wheel 11 Jan 26 16:18 /var -> private/var
Por que está /tmp
listado no painel de compartilhamento, mas /var
não está (embora ambos façam parte de /private
)? A documentação do Docker para Mac sobre namespaces de sistema de arquivos explica:
Por padrão, você pode compartilhar arquivos em /Users/
, /Volumes/
, /private/
, e /tmp
diretamente. Para adicionar ou remover árvores de diretório que são exportadas para o Docker, use a guia Compartilhamento de arquivos nas preferências do Docker no menu da baleia -> Preferências -> Compartilhamento de arquivos. (Veja Preferências.)
Todos os outros caminhos usados em -v
montagens de ligação são originados da VM Moby Linux que executa os contêineres do Docker, portanto , os argumentos -v /var/run/docker.sock:/var/run/docker.sock
devem funcionar conforme o esperado. Se um caminho do macOS não for compartilhado e não existir na VM, uma tentativa de montagem de vinculação falhará em vez de criá-lo na VM. Os caminhos que já existem na VM e contêm arquivos são reservados pelo Docker e não podem ser exportados do macOS.
Observe que /var/run
é mencionado especificamente aqui como um local que seria montado a partir da VM Linux, em vez do macOS.
Quando você pede uma montagem de volume, as exportações do sistema de arquivos macOS são verificadas primeiro. Se não houver correspondência, a VM Linux onde o Docker está sendo executado será verificada a seguir. Se nenhum deles tiver o caminho solicitado, a montagem falhará.
No seu caso, /var
não é exportado pelo macOS. /var
existe na VM Linux, mas /var/folders
não. Portanto, o caminho não está disponível e a montagem falha.
Se você alterar o caminho para /private/var
, terá êxito, porque o macOS exporta toda a /private
árvore do sistema de arquivos para montagem.
Para tornar as coisas mais portáteis, você pode querer testar em qual plataforma você está executando atualmente e, se for macOS, prefixe o caminho de montagem com /private
.
-v /private/var/folders/zz/...
?