Seperti yang telah Anda catat dalam pembaruan Anda, UID pada file tidak dipetakan dalam bind mount, ini adalah cara Linux mengikat mount. Anda dapat memulai wadah dengan UID yang berbeda, tetapi ini akan menghasilkan /etc/passwd di dalam pemetaan wadah ke pengguna yang berbeda, atau bahkan tidak ada (dalam kasus Anda). Ada berbagai opsi, tetapi preferensi saya adalah memodifikasi UID penampung dengan perintah usermod yang berjalan di dalam titik masuk untuk gambar dengan skrip fix-perms saya. Ini harus dijalankan sebagai root, tetapi Anda kemudian dapat menggunakan gosu
untuk turun kembali ke pengguna saat menjalankan perintah Anda. Saya telah membicarakan hal ini dalam presentasi dockercon saya.
Perhatikan, alih-alih mount bind ke direktori host NFS, Anda juga dapat melakukan mount volume langsung ke server NFS. Berikut beberapa contoh cara melakukannya:
# create a reusable volume
$ docker volume create --driver local \
--opt type=nfs \
--opt o=nfsvers=4,addr=nfs.example.com,rw \
--opt device=:/path/to/dir \
foo
# or from the docker run command
$ docker run -it --rm \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=nfs.example.com\",volume-opt=device=:/host/path \
foo
# or to create a service
$ docker service create \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=nfs.example.com\",volume-opt=device=:/host/path \
foo
# inside a docker-compose file
...
volumes:
nfs-data:
driver: local
driver_opts:
type: nfs
o: nfsvers=4,addr=nfs.example.com,rw
device: ":/path/to/dir"
...