Wie Sie in Ihrem Update angemerkt haben, wird die UID der Dateien nicht in Bind-Mounts abgebildet. So bindet Linux Mounts. Sie können den Container mit einer anderen UID starten, aber dies führt dazu, dass /etc/passwd innerhalb des Containers einem anderen oder sogar keinem (in Ihrem Fall) Benutzer zugeordnet wird. Es gibt verschiedene Optionen, aber ich bevorzuge es, die UID des Containers mit einem usermod-Befehl zu ändern, der innerhalb eines Einstiegspunkts für das Image mit meinem fix-perms-Skript ausgeführt wird. Dies muss als root ausgeführt werden, aber Sie können dann gosu
verwenden um beim Ausführen Ihrer Befehle zum Benutzer zurückzukehren. Ich habe darüber in meinen Dockercon-Präsentationen gesprochen.
Beachten Sie, dass Sie anstelle eines Bind-Mounts in das Host-NFS-Verzeichnis auch ein Volume-Mount direkt auf dem NFS-Server durchführen können. Hier sind einige Beispiele dafür:
# 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"
...