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
:
$ 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é 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:
Par défaut, vous pouvez partager des fichiers dans /Users/
, /Volumes/
, /private/
et /tmp
directement. Pour ajouter ou supprimer des arborescences de répertoires exportées vers Docker, utilisez l'onglet Partage de fichiers dans le menu baleine des préférences de Docker -> Préférences -> Partage de fichiers. (Voir Préférences.)
Tous les autres chemins utilisés dans les -v
montages de liaison proviennent de la machine virtuelle Moby Linux exécutant les conteneurs Docker, de sorte que les arguments tels que -v /var/run/docker.sock:/var/run/docker.sock
devraient fonctionner comme prévu. Si un chemin macOS n'est pas partagé et n'existe pas dans la machine virtuelle, une tentative de liaison de montage échouera plutôt que de le créer dans la machine virtuelle. Les chemins qui existent déjà dans la machine virtuelle et contiennent des fichiers sont réservés par Docker et ne peuvent pas être exportés depuis macOS.
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
.
-v /private/var/folders/zz/...
?