Perintah docker run -v /var/folders/zz/...
menghasilkan kesalahan berikut.
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.
Ketika saya membuka File Sharing, saya melihat bahwa / private sudah terdaftar.
Jika saya mencoba untuk menambahkan /var/folder/
, itu memutuskan /private/var/folders
, yang merupakan bagian dari / pribadi dan karenanya penambahan ditolak.
Untuk meringkas, menurut saya direktori /var/folders/..
tersebut dibagikan oleh OS X sebagai subdirektori /private
dan karenanya harus diketahui oleh Docker. Bantuan apa pun untuk menyelesaikan masalah ini akan sangat kami hargai.
Sebagai percobaan, saya mengganti /private
di File Sharing dengan /private/var/folders
dan memulai kembali buruh pelabuhan tetapi hasilnya tidak berubah.
Untuk referensi yang lebih lengkap, ini adalah skrip .sh , yang menjalankan skrip python ini , yang selanjutnya menjalankan perintah buruh pelabuhan.
sumber
-v /private/var/folders/zz/...
?WORKING_DIR="$(mktemp -d)
dan-v ${WORKING_DIR}
,. Tetapi meretasnya keWORKING_DIR="/private"$(mktemp -d)
, tampaknya menyelesaikan masalah. Terima kasih banyak :)Jawaban:
Dudukan volume Docker untuk Mac berperilaku berbeda dari sistem Docker dasar. Ini sebagian besar karena Docker mencoba mematuhi pedoman kotak pasir sistem file Apple.
Seperti yang ditunjukkan di preferensi Docker, hanya jalur tertentu yang diekspor oleh macOS.
/Users
/Volumes
/tmp
/private
/var
di macOS adalah tautan simbolis ke/private
. Itu juga berlaku untuk/tmp
:Mengapa
/tmp
dicantumkan di panel berbagi, tetapi/var
tidak (meskipun keduanya adalah bagian dari/private
)? Dokumentasi Docker untuk Mac tentang ruang nama sistem file menjelaskan:Perhatikan yang
/var/run
secara khusus disebutkan di sini sebagai tempat yang akan dipasang dari VM Linux, bukan dari macOS.Saat Anda meminta pemasangan volume, ekspor sistem file macOS diperiksa terlebih dahulu. Jika tidak ada kecocokan di sana, VM Linux tempat Docker dijalankan akan diperiksa berikutnya. Jika tidak satu pun dari mereka memiliki jalur yang Anda minta, maka pemasangan gagal.
Dalam kasus Anda,
/var
tidak diekspor oleh macOS./var
ada di VM Linux, tetapi/var/folders
tidak. Oleh karena itu, jalur tidak tersedia, dan pemasangan gagal.Jika Anda mengubah jalur ke
/private/var
, maka itu akan berhasil, karena macOS mengekspor seluruh/private
pohon sistem file untuk dipasang.Untuk membuatnya lebih portabel, Anda mungkin ingin menguji platform mana yang saat ini Anda jalankan, dan jika itu macOS, awali jalur pemasangan
/private
.sumber
mac-path:container-path
, dan/private
hanya akan ada di sisi Mac saja./private/etc/localtime
untuk mac os,/etc/localtime
untuk ubuntu. Bagaimana cara memberi tahu info sistem di Docker-compose.yml? Terima kasih!Sebagai solusi alternatif :
Ubah jalur dari
/private/instance1-data:/home
menjadi./instance1-data:/home
Di tanah * nix dan karenanya, Docker,
.
menunjukkan direktori saat ini. Karena macOS pilih-pilih dan semakin pemilih tentang kotak pasir, ini sepertinya solusi yang layak untuk macOS. Buat saja folder yang diperlukaninstance1
di direktori yang sama.Keuntungan lain dari solusi ini adalah menghilangkan kebutuhan untuk menjalankan
docker-compose
dengansudo
. Terlepas dari itu, itu tidak menyebabkan bahaya dalam kasus ini tetapi tetap saja, itu nilai tambah.sumber
Sebagai contoh, menggunakan Portainer, perintah ini berfungsi untuk saya:
Tapi, jika saya memvariasikan
-v /var:/data
sama sekali, itu tidak akan berhasil. Saya pikir (tetapi tidak yakin) itu karena Docker mencoba melakukan mkdir. Jadi, jika saya mencoba memasang-v /var/whatever:/data
, mkdir gagal karena tidak cukup izin, dan tidak berhasil.Saya memiliki 2 Mac (High Sierra) dan saya mencobanya pada keduanya. Permasalahan yang sama. Juga, saya mencoba menggunakan saluran Docker Beta. Saya rasa saya mengerti jawaban Dan Lowe: Saya akan memperbarui jawaban ini jika itu berhasil untuk saya.
sumber
Saya memiliki masalah serupa saat saya membuat direktori
/var/tmp
di Mac yang ingin saya pasang di kontainer buruh pelabuhan.Memecahkannya dengan menambahkan jalur direktori ke file sebagai berikut:
Sekarang saya bisa melihat direktori
/var/tmp
di Docker-> preferensi-> sumber daya-> berbagi file. Lalu saya restart buruh pelabuhan tersebut.Itu kemudian memecahkan masalah pemasangan saya.
sumber
Masalah saya diperbaiki ketika saya menghapus Path proyek dari File Sharing di preferensi buruh pelabuhan dan restart buruh pelabuhan, Kemudian tambahkan path file proyek lagi.
sumber
Masalah saya diperbaiki mirip dengan Arghya. Saya hanya perlu menghapus jalur dari file sharing dan restart buruh pelabuhan.
sumber