Podłączenia woluminów Docker for Mac zachowują się inaczej niż podstawowy system Docker. Dzieje się tak głównie dlatego, że Docker stara się przestrzegać wytycznych Apple dotyczących piaskownicy systemu plików.
Jak pokazano w preferencjach Dockera, tylko niektóre ścieżki są eksportowane przez macOS.
/Users
/Volumes
/tmp
/private
/var
w macOS jest dowiązaniem symbolicznym do /private
. Dotyczy to również /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
Dlaczego jest /tmp
wymieniony w panelu udostępniania, a /var
nie (mimo że oba są częścią /private
)? Dokumentacja Docker for Mac dotycząca przestrzeni nazw systemów plików wyjaśnia:
Domyślnie można udostępniać pliki /Users/
, /Volumes/
, /private/
, i /tmp
bezpośrednio. Aby dodać lub usunąć drzewa katalogów, które są eksportowane do Dockera, użyj zakładki Udostępnianie plików w menu wieloryba preferencji Dockera -> Preferencje -> Udostępnianie plików. (Zobacz Preferencje.)
Wszystkie inne ścieżki używane w instalacjach -v
powiązań pochodzą z maszyny wirtualnej Moby Linux z kontenerami Docker, więc argumenty takie jak -v /var/run/docker.sock:/var/run/docker.sock
powinny działać zgodnie z oczekiwaniami. Jeśli ścieżka macOS nie jest udostępniona i nie istnieje na maszynie wirtualnej, próba powiązania instalacji zakończy się niepowodzeniem, zamiast utworzyć ją na maszynie wirtualnej. Ścieżki, które już istnieją na maszynie wirtualnej i zawierają pliki, są zarezerwowane przez platformę Docker i nie można ich wyeksportować z systemu macOS.
Zwróć uwagę, że /var/run
jest tutaj wyraźnie wymienione jako miejsce, które zostanie zamontowane z maszyny wirtualnej z systemem Linux, a nie z systemu macOS.
Kiedy poprosisz o zamontowanie woluminu, najpierw sprawdzane są eksportowanie systemu plików macOS. Jeśli nie ma tam dopasowania, maszyna wirtualna z systemem Linux, na której działa platforma Docker, jest następnie sprawdzana. Jeśli żaden z nich nie ma żądanej ścieżki, instalacja kończy się niepowodzeniem.
W twoim przypadku /var
nie jest eksportowany przez macOS. /var
istnieje na maszynie wirtualnej z systemem Linux, ale /var/folders
tak nie jest. Dlatego ścieżka jest niedostępna, a instalacja kończy się niepowodzeniem.
Jeśli zmienisz ścieżkę na /private/var
, to się powiedzie, ponieważ macOS eksportuje całe /private
drzewo systemu plików do zamontowania.
Aby uczynić rzeczy bardziej przenośnymi, możesz przetestować, na której platformie aktualnie pracujesz, a jeśli jest to macOS, poprzedz ścieżkę montowania przedrostkiem /private
.
-v /private/var/folders/zz/...
?