Ini terjadi karena volumenya menggunakan private
mount propagation. Ini berarti bahwa begitu mount terjadi, setiap perubahan yang terjadi di sisi asal (mis. Sisi "host" dalam kasus Docker) tidak akan terlihat di bawah mount.
Ada beberapa cara untuk menangani ini:
Lakukan pemasangan NFS terlebih dahulu, kemudian mulai wadah. Mount akan merambat ke wadah, namun seperti sebelum perubahan apa pun pada mount tidak akan terlihat oleh kontainer (termasuk unmount).
Gunakan propagasi "budak". Ini berarti bahwa setelah mount dibuat, setiap perubahan di sisi asal (buruh pelabuhan) akan dapat dilihat di target (dalam wadah). Jika Anda sedang melakukan mount bersarang, Anda akan ingin menggunakan rslave
( r
untuk rekursif).
Ada juga propagasi "bersama". Mode ini akan membuat perubahan ke titik mount dari dalam wadah merambat ke host, serta sebaliknya. Karena pengguna Anda bahkan tidak memiliki hak istimewa untuk melakukan perubahan seperti itu (kecuali jika Anda menambahkan CAP_SYS_ADMIN), ini mungkin bukan yang Anda inginkan.
Anda dapat mengatur mode propagasi saat membuat mount seperti:
$ docker run -v /foo:/bar:private
Alternatif lain adalah menggunakan volume daripada mount host. Anda dapat melakukan ini seperti ini:
$ docker volume create \
--name mynfs \
--opt type=nfs \
--opt device=:<nfs export path> \
--opt o=addr=<nfs host> \
mynfs
$ docker run -it -v mynfs:/foo alpine sh
Ini akan memastikan untuk selalu me-mount dalam wadah untuk Anda, tidak bergantung pada pengaturan host dalam beberapa cara tertentu atau berurusan dengan propagasi mount.
Catatan : :
di bagian depan lintasan perangkat diperlukan, hanya sesuatu yang aneh tentang modul kernel nfs.
Catatan : Docker saat ini tidak menyelesaikan <nfs host>
dari nama DNS (itu akan di 1.13) sehingga Anda harus memberikan alamat ip di sini.
Rincian lebih lanjut tentang pemasangan "subtree bersama": https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt