Comme vous l'avez noté dans votre mise à jour, l'UID sur les fichiers n'est pas mappé dans les montages liés, c'est ainsi que Linux lie les montages. Vous pouvez démarrer le conteneur avec un UID différent, mais cela entraînera le mappage de /etc/passwd à l'intérieur du conteneur vers un utilisateur différent, voire aucun (dans votre cas). Il existe différentes options, mais ma préférence est de modifier l'UID du conteneur avec une commande usermod qui s'exécute à l'intérieur d'un point d'entrée pour l'image avec mon script fix-perms. Cela doit être exécuté en tant que root, mais vous pouvez ensuite utiliser gosu
pour revenir à l'utilisateur lors de l'exécution de vos commandes. J'en ai parlé dans mes présentations dockercon.
Notez qu'au lieu d'un montage lié au répertoire NFS de l'hôte, vous pouvez également effectuer un montage de volume directement sur le serveur NFS. Voici plusieurs exemples de la façon de procéder :
# 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"
...