124 votes

Docker: Montages refusés. Les chemins d'accès ... ne sont pas partagés à partir d'OS X et ne sont pas connus de Docker.

La commande docker run -v /var/folders/zz/... génère l'erreur suivante.

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.

Quand je fais ouvrir le Partage de Fichier, je vois que /privé est déjà répertoriés.

Si je tente d'ajouter /var/folder/, il décide d' /private/var/folders, qui est un sous-ensemble de /privé et donc le plus est rejetée.

Pour résumer, il me semble que le répertoire /var/folders/.. est partagé par OS X comme un sous-dossier /private et doit donc être connue de Docker. Toute aide sur la résolution de ce serait apprécié.

Comme une expérience, j'ai remplacé l' /private dans le Partage de Fichiers avec l' /private/var/folders et redémarré le menu fixe mais le résultat n'a pas changé.

Juste pour une référence plus complète, c'est l' .sh scriptqui s'exécute ce script python, qui exécute à son tour le panneau de commande.

152voto

Dan Lowe Points 21696

Docker pour Mac volume supports de se comporter différemment de la base de Support système. C'est surtout parce que Docker essaie de se conformer à Apple de fichiers du sandbox de lignes directrices.

Comme indiqué dans le Panneau de préférences, seulement certains chemins sont exportées par macOS.

  • /Users
  • /Volumes
  • /tmp
  • /private

File Sharing preference panel

/var dans macOS est un lien symbolique, en /private. Cela est également vrai pour /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

Pourquoi est - /tmp répertoriés dans le panneau de partage, mais /var n'est pas (même si les deux sont une partie de l' /private)? Docker pour Mac de la documentation sur les espaces de noms du système de fichiers explique:

Par défaut, vous pouvez partager des fichiers en /Users/, /Volumes/, /private/, et /tmp directement. Pour ajouter ou supprimer le répertoire des arbres qui sont exportés vers le Panneau, utilisez l'onglet partage de Fichiers dans le Panneau de préférences de la baleine menu -> Préférences -> partage de Fichiers. (Voir Les Préférences.)

Tous les autres chemins d'accès utilisés en -v lier les supports sont obtenus à partir de la Moby machine virtuelle Linux exécutant les conteneurs Docker, donc des arguments tels que -v /var/run/docker.sock:/var/run/docker.sock devrait fonctionner comme prévu. Si un macOS chemin n'est pas partagé et n'existe pas dans la machine virtuelle, d'une tentative de lier monter il va échouer plutôt que de la créer dans la VM. Les chemins qui existent déjà dans la machine virtuelle et contiennent les fichiers sont réservés par le menu fixe et ne peuvent pas être exportées à partir de macOS.

Notez que /var/run est spécifiquement mentionné ici comme un lieu qui pourrait être installé à partir de la machine virtuelle Linux, au lieu de partir de macOS.

Lorsque vous demandez un montage de volume, macOS système de fichiers, les exportations sont vérifiés en premier lieu. Si aucune correspondance n'est trouvée là, la machine virtuelle Linux où le Panneau est en cours d'exécution est cochée. Si aucun d'entre eux ont le chemin que vous avez demandé, le montage échoue.

Dans votre cas, /var n'est pas exportée par macOS. /var existe dans la machine virtuelle Linux, mais /var/folders ne le sont pas. Par conséquent, le chemin n'est pas disponible, et le montage échoue.

Si vous modifiez le chemin d'accès /private/var, alors qu'il va réussir, parce que macOS exportations de l'ensemble de l' /private arborescence du système de fichiers pour le montage.

Afin de rendre les choses plus portable, vous pouvez tester la plate-forme sont actuellement en cours d'exécution, et si c'est macOS, préfixe du chemin de montage avec /private.

2voto

djangofan Points 6046

Comme un exemple, en utilisant Portainer, cette commande fonctionne pour moi:

docker run -d --restart unless-stopped -p 9000:9000 \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v /var:/data portainer/portainer --no-auth

Mais, si je modifie l' -v /var:/data à tous, il ne fonctionnera pas. Je pense (mais pas sûr) que c'est parce que Docker est en train de faire un mkdir. Donc, si j'essaie de mont - -v /var/whatever:/data, mkdir échoue parce que pas assez de permission, et il ne fonctionne pas.

J'ai 2 Mac (High Sierra) et je l'ai essayé sur les deux. Même problème. Aussi, j'ai essayé d'utiliser Docker Bêta canal. Je crois que je comprends Dan Lowe réponse: je vais mettre à jour cette réponse si cela fonctionne pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X