O comando docker run -v /var/folders/zz/...
produz o seguinte erro.
docker: Error response from daemon: Mounts denied:
The paths /var/folders/zz/... and /var/folders/zz/...
are not shared from OS X and are not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.
Quando abro o Compartilhamento de arquivos, vejo que / private já está listado.
Se eu tentar adicionar /var/folder/
, ele resolverá para /private/var/folders
, que é um subconjunto de / private e, portanto, a adição será rejeitada.
Para resumir, me parece que o diretório /var/folders/..
é compartilhado pelo OS X como um subdiretório de /private
e, portanto, deve ser conhecido pelo Docker. Qualquer ajuda em resolver isso seria apreciada.
Como experiência, substituí /private
em Compartilhamento de arquivos por /private/var/folders
e reiniciei a janela de encaixe, mas o resultado não mudou.
Apenas para uma referência mais completa, este é o script .sh , que executa este script Python , que por sua vez executa o comando docker.
fonte
-v /private/var/folders/zz/...
?WORKING_DIR="$(mktemp -d)
e-v ${WORKING_DIR}
,. Mas hackear issoWORKING_DIR="/private"$(mktemp -d)
parece resolver o problema. Muito obrigado :)Respostas:
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
: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: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
.fonte
mac-path:container-path
, e/private
só existiria no lado Mac dele./private/etc/localtime
para mac os,/etc/localtime
para ubuntu. Como informar as informações do sistema em Docker-compose.yml? Obrigado!Como solução alternativa :
Mude o caminho de
/private/instance1-data:/home
para./instance1-data:/home
No * nix land e, portanto, no Docker, o
.
indica o diretório atual. Como o macOS é exigente e está cada vez mais exigente com relação ao sandbox, essa parece uma solução viável para o macOS. Basta criar a pasta necessáriainstance1
no mesmo diretório.Outra vantagem desta solução é que ela elimina a necessidade de executar
docker-compose
comsudo
. Independentemente disso, não causa nenhum dano neste caso, mas ainda assim, é uma vantagem.fonte
Por exemplo, usando o Portainer, este comando funciona para mim:
Mas, se eu variar o
-v /var:/data
, não funcionará. Eu acho (mas não tenho certeza) que é porque o Docker está tentando fazer um mkdir. Então, se eu tento montar-v /var/whatever:/data
, mkdir falha porque não tem permissão suficiente e não funciona.Tenho 2 Macs (High Sierra) e experimentei em ambos. Mesmo problema. Além disso, tentei usar o canal Docker Beta. Acho que entendi a resposta de Dan Lowe: atualizarei esta resposta se funcionar para mim.
fonte
Tive um problema semelhante quando criei um diretório
/var/tmp
em meu Mac que queria montar em meu contêiner docker.Resolvido adicionando o caminho do diretório a um arquivo da seguinte maneira:
Agora eu podia ver o diretório
/var/tmp
em Docker-> preferência-> recursos-> compartilhamento de arquivo. Em seguida, reiniciei o docker.Em seguida, resolveu meu problema de montagem.
fonte