I montaggi di volumi Docker per Mac si comportano in modo diverso rispetto al sistema Docker di base. Ciò è principalmente dovuto al fatto che Docker cerca di conformarsi alle linee guida sandbox del filesystem di Apple.
Come mostrato nelle preferenze di Docker, solo alcuni percorsi vengono esportati da macOS.
/Users
/Volumes
/tmp
/private
/var
in macOS è un collegamento simbolico in /private
. Questo vale anche per /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
Perché è /tmp
elencato nel pannello di condivisione, ma /var
non lo è (anche se entrambi ne fanno parte /private
)? La documentazione di Docker per Mac sugli spazi dei nomi del file system spiega:
Per impostazione predefinita, è possibile condividere i file in /Users/
, /Volumes/
, /private/
, e /tmp
direttamente. Per aggiungere o rimuovere alberi di directory esportati in Docker, utilizzare la scheda Condivisione file nel menu balena delle preferenze di Docker -> Preferenze -> Condivisione file. (Vedi Preferenze.)
Tutti gli altri percorsi utilizzati nei -v
montaggi bind provengono dalla VM Moby Linux che esegue i contenitori Docker, quindi argomenti come -v /var/run/docker.sock:/var/run/docker.sock
dovrebbero funzionare come previsto. Se un percorso macOS non è condiviso e non esiste nella VM, un tentativo di collegarlo al montaggio fallirà invece di crearlo nella VM. I percorsi già esistenti nella VM e che contengono file sono riservati da Docker e non possono essere esportati da macOS.
Nota che /var/run
è specificamente menzionato qui come un luogo che verrebbe montato dalla VM Linux, invece che da macOS.
Quando chiedi il montaggio di un volume, le esportazioni del filesystem macOS vengono controllate per prime. Se non c'è corrispondenza lì, viene controllata la VM Linux su cui è in esecuzione Docker. Se nessuno dei due ha il percorso richiesto, il montaggio non riesce.
Nel tuo caso, /var
non viene esportato da macOS. /var
esiste nella VM Linux, ma /var/folders
non lo è. Pertanto, il percorso non è disponibile e il montaggio non riesce.
Se modifichi il percorso in /private/var
, avrà successo, perché macOS esporta l'intero /private
albero del filesystem per il montaggio.
Per rendere le cose più portabili, potresti voler testare su quale piattaforma sei attualmente in esecuzione e, se è macOS, anteporre al percorso di montaggio /private
.
-v /private/var/folders/zz/...
?