La commande docker run -v /var/folders/zz/...
produit 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.
Lorsque j'ouvre le partage de fichiers, je vois que / private est déjà répertorié.
Si j'essaie d'ajouter /var/folder/
, cela résout /private/var/folders
, qui est un sous-ensemble de / private et donc l'ajout est rejeté.
Pour résumer, il me semble que le répertoire /var/folders/..
est partagé par OS X en tant que sous-répertoire de /private
et doit donc être connu de Docker. Toute aide pour résoudre ce problème serait appréciée.
À titre expérimental, j'ai remplacé le /private
partage de fichiers par /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, voici le script .sh , qui exécute ce script python , qui à son tour exécute la commande docker.
la source
-v /private/var/folders/zz/...
?WORKING_DIR="$(mktemp -d)
et,-v ${WORKING_DIR}
. Mais pirater celaWORKING_DIR="/private"$(mktemp -d)
semble résoudre le problème. Merci beaucoup :)Réponses:
Les montages de volume Docker pour Mac se comportent différemment du système Docker de base. Ceci est principalement dû au fait que Docker tente de se conformer aux directives du sandbox du système de fichiers d'Apple.
Comme indiqué dans les préférences de Docker, seuls certains chemins sont exportés par macOS.
/Users
/Volumes
/tmp
/private
/var
dans macOS est un lien symbolique vers/private
. Cela est également vrai pour/tmp
:Pourquoi est
/tmp
répertorié dans le panneau de partage, mais/var
ne l'est pas (même si les deux en font partie/private
)? La documentation de Docker pour Mac sur les espaces de noms des systèmes de fichiers explique:Notez que cela
/var/run
est spécifiquement mentionné ici comme un endroit qui serait monté à partir de la machine virtuelle Linux, au lieu de macOS.Lorsque vous demandez un montage de volume, les exportations du système de fichiers macOS sont vérifiées en premier. S'il n'y a pas de correspondance, la machine virtuelle Linux sur laquelle Docker est exécuté est ensuite vérifiée. Si aucun d'eux n'a le chemin que vous avez demandé, le montage échoue.
Dans votre cas,
/var
n'est pas exporté par macOS./var
existe dans la machine virtuelle Linux, mais/var/folders
pas. Par conséquent, le chemin d'accès n'est pas disponible et le montage échoue.Si vous modifiez le chemin vers
/private/var
, cela réussira, car macOS exporte l'intégralité de l'/private
arborescence du système de fichiers pour le montage.Afin de rendre les choses plus portables, vous voudrez peut-être tester la plate-forme sur laquelle vous utilisez actuellement, et s'il s'agit de macOS, préfixez le chemin de montage avec
/private
.la source
mac-path:container-path
et/private
n'existerait que du côté Mac./private/etc/localtime
pour mac os,/etc/localtime
pour ubuntu. Comment dire les informations système dans Docker-compose.yml? Je vous remercie!Comme solution alternative :
Changer le chemin de
/private/instance1-data:/home
à./instance1-data:/home
Dans le pays * nix et par conséquent, Docker, le
.
indique le répertoire actuel. Étant donné que macOS est difficile et devient encore plus sélectif en matière de sandboxing, cela semble être une solution viable pour macOS. Créez simplement le dossier nécessaireinstance1
dans le même répertoire.Un autre avantage de cette solution est qu'elle supprime le besoin de courir
docker-compose
avecsudo
. Quoi qu'il en soit, cela ne cause aucun mal dans ce cas, mais c'est quand même un plus.la source
À titre d'exemple, en utilisant Portainer, cette commande fonctionne pour moi:
Mais, si je change le
-v /var:/data
du tout, cela ne fonctionnera pas. Je pense (mais pas sûr) que c'est parce que Docker essaie de faire un mkdir. Donc, si j'essaye de monter-v /var/whatever:/data
, mkdir échoue car pas assez de permission, et ça ne marche pas.J'ai 2 Mac (High Sierra) et je l'ai essayé sur les deux. Même problème. De plus, j'ai essayé d'utiliser le canal Docker Beta. Je pense que je comprends la réponse de Dan Lowe: je mettrai à jour cette réponse si cela fonctionne pour moi.
la source
J'ai eu un problème similaire où j'avais créé un répertoire
/var/tmp
dans mon Mac que je voulais monter dans mon conteneur docker.Résolu le problème en ajoutant le chemin du répertoire à un fichier comme suit:
Maintenant, je pouvais voir le répertoire
/var/tmp
dans Docker-> préférence-> ressources-> partage de fichiers. Ensuite, j'ai redémarré le docker.Cela a ensuite résolu mon problème de montage.
la source