Come hai notato nel tuo aggiornamento, l'UID sui file non è mappato nei bind mount, questo è il modo in cui Linux lega i mount. Puoi avviare il contenitore con un UID diverso, ma ciò comporterà la mappatura di /etc/passwd all'interno del contenitore su un utente diverso o addirittura nessuno (nel tuo caso). Esistono varie opzioni, ma la mia preferenza è modificare l'UID del contenitore con un comando usermod che viene eseguito all'interno di un punto di ingresso per l'immagine con il mio script fix-perms. Questo deve essere eseguito come root, ma puoi usare gosu
per tornare all'utente durante l'esecuzione dei comandi. Ne ho parlato nelle mie presentazioni dockercon.
Nota, invece di un bind mount alla directory host NFS, puoi anche montare un volume direttamente sul server NFS. Ecco alcuni esempi di come farlo:
# 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"
...