Como ha notado en su actualización, el UID en los archivos no está asignado en los montajes de enlace, así es como Linux enlaza los montajes. Puede iniciar el contenedor con un UID diferente, pero esto dará como resultado que /etc/passwd dentro del contenedor se asigne a un usuario diferente, o incluso a ninguno (en su caso). Hay varias opciones, pero mi preferencia es modificar el UID del contenedor con un comando de mod de usuario que se ejecuta dentro de un punto de entrada para la imagen con mi secuencia de comandos fix-perms. Esto debe ejecutarse como root, pero luego puede usar gosu
para regresar al usuario al ejecutar sus comandos. He hablado de esto en mis presentaciones de dockercon.
Tenga en cuenta que, en lugar de un montaje de enlace en el directorio host NFS, también puede realizar un montaje de volumen directamente en el servidor NFS. Aquí hay varios ejemplos de cómo hacerlo:
# 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"
...