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
:
$ 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
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:
Secara default, Anda dapat berbagi file di /Users/
, /Volumes/
, /private/
, dan /tmp
langsung. Untuk menambah atau menghapus pohon direktori yang diekspor ke Docker, gunakan tab File sharing di menu paus preferensi Docker -> Preferensi -> Berbagi file. (Lihat Preferensi.)
Semua jalur lain yang digunakan dalam -v
bind mount bersumber dari VM Moby Linux yang menjalankan container Docker, jadi argumen seperti itu -v /var/run/docker.sock:/var/run/docker.sock
harus berfungsi seperti yang diharapkan. Jika jalur macOS tidak dibagikan dan tidak ada di VM, upaya untuk mengikat pemasangannya akan gagal daripada membuatnya di VM. Jalur yang sudah ada di VM dan berisi file dicadangkan oleh Docker dan tidak dapat diekspor dari macOS.
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
.
-v /private/var/folders/zz/...
?