Polecenie docker run -v /var/folders/zz/...
generuje następujący błąd.
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.
Kiedy otwieram Udostępnianie plików, widzę, że / private jest już na liście.
Jeśli spróbuję dodać /var/folder/
, następuje to /private/var/folders
, co jest podzbiorem / private i dlatego dodanie jest odrzucane.
Podsumowując, wydaje mi się, że katalog /var/folders/..
jest współdzielony przez OS X jako podkatalog /private
i dlatego musi być znany Dockerowi. Każda pomoc w rozwiązaniu tego problemu będzie mile widziana.
W ramach eksperymentu zastąpiłem /private
w Udostępnianie plików /private/var/folders
i ponownie uruchomiłem okno dokowane, ale wynik się nie zmienił.
Aby uzyskać pełniejsze informacje, jest to skrypt .sh , który uruchamia ten skrypt w języku Python , który z kolei uruchamia polecenie docker.
źródło
-v /private/var/folders/zz/...
?WORKING_DIR="$(mktemp -d)
i-v ${WORKING_DIR}
. Ale włamanie do tegoWORKING_DIR="/private"$(mktemp -d)
wydaje się rozwiązać problem. Dziękuję bardzo :)Odpowiedzi:
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
: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: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
.źródło
mac-path:container-path
i/private
istniałby tylko po stronie Maca./private/etc/localtime
przypadku systemu Mac OS, systemu/etc/localtime
Ubuntu. Jak przekazać informacje o systemie w Docker-compose.yml? Dziękuję Ci!Jako alternatywne rozwiązanie:
Zmień ścieżkę z
/private/instance1-data:/home
na./instance1-data:/home
W krainie * nix, a tym samym w Dockerze, symbol
.
wskazuje bieżący katalog. Ponieważ macOS jest wybredny i staje się jeszcze bardziej wybredny, jeśli chodzi o piaskownicę, wydaje się to realnym rozwiązaniem dla macOS. Po prostu utwórz potrzebny folderinstance1
w tym samym katalogu.Kolejną zaletą tego rozwiązania jest to, że eliminuje potrzebę uruchamiania
docker-compose
zsudo
. Niezależnie od tego, w tym przypadku nie powoduje to żadnej szkody, ale nadal jest to plus.źródło
Miałem podobny problem, gdy utworzyłem katalog
/var/tmp
na moim Macu, który chciałem zamontować w moim kontenerze docker.Rozwiązano to, dodając ścieżkę katalogu do pliku w następujący sposób:
Teraz mogłem zobaczyć katalog
/var/tmp
w Docker-> preferencje-> zasoby-> udostępnianie plików. Następnie ponownie uruchomiłem docker.To rozwiązało mój problem z montażem.
źródło
Na przykład, używając Portainera, to polecenie działa dla mnie:
Ale jeśli w ogóle zmienię
-v /var:/data
, to nie zadziała. Myślę (ale nie jestem pewien), że to dlatego, że Docker próbuje zrobić mkdir. Tak więc, jeśli spróbuję zamontować-v /var/whatever:/data
, mkdir kończy się niepowodzeniem, ponieważ nie ma wystarczających uprawnień i nie działa.Mam 2 komputery Mac (High Sierra) i wypróbowałem je na obu. Taki sam problem. Próbowałem też użyć kanału Docker Beta. Myślę, że rozumiem odpowiedź Dana Lowe'a: zaktualizuję tę odpowiedź, jeśli to zadziała.
źródło
Mój problem został rozwiązany, gdy usunąłem ścieżkę projektu z udostępniania plików w preferencjach okna dokowanego i ponownie uruchomiłem okno dokowane, a następnie ponownie dodałem ścieżkę pliku projektu.
źródło
Mój problem został rozwiązany podobnie jak w Arghya. Musiałem tylko usunąć ścieżki z udostępniania plików i ponownie uruchomić docker.
źródło
W przypadku netcoreapp upewnij się, że udostępniłeś / usr / local / share /
źródło