tag library hub dockers container compose docker centos mount nfs

library - Montaje de acciones nfs dentro de contenedor docker



dockers container download (4)

A partir de la ventana acoplable 17.06, puede montar recursos compartidos de NFS en el contenedor directamente cuando lo ejecuta, sin la necesidad de capacidades adicionales

export NFS_VOL_NAME=mynfs NFS_LOCAL_MNT=/mnt/mynfs NFS_SERVER=my.nfs.server.com NFS_SHARE=/my/server/path NFS_OPTS=vers=4,soft docker run --mount / "src=$NFS_VOL_NAME,dst=$NFS_LOCAL_MNT,volume-opt=device=:$NFS_SHARE,/"volume-opt=o=addr=$NFS_SERVER,$NFS_OPTS/",type=volume,volume-driver=local,volume-opt=type=nfs" / busybox ls $NFS_LOCAL_MNT

Alternativamente, puede crear el volumen antes del contenedor:

docker volume create --driver local / --opt type=nfs --opt o=addr=$NFS_SERVER,$NFS_OPTS / --opt device=:$NFS_SHARE $NFS_VOL_NAME docker run --rm -v $NFS_VOL_NAME:$NFS_LOCAL_MNT busybox ls $NFS_LOCAL_MNT

Recibí la sugerencia de https://github.com/moby/moby/issues/28809

¿Alguien sabe cómo montar nfs share dentro del contenedor docker con la imagen base centos? He intentado este comando:

mount server:/dir /mount/point

y consiguió el siguiente error:

mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use ''-o nolock'' to keep locks local, or start statd.
mount.nfs: an incorrect mount option was specified

cuando trato de usarlo con la opción -o nolock , el error es:

mount.nfs: Operation not permitted


Monté los nfs en el contenedor docker, gracias por @helmbert.

  1. Ejecute un contenedor docker con el --privileged=true .

    $ docker run -it --privileged=true centos:7 bash [root@f7915ae635aa /]# yum install -y nfs-utils

  2. Instale el paquete de herramientas nfs y monte nfs en CentOS.

    [root@f7915ae635aa /]# yum install -y nfs-utils [root@f7915ae635aa /]# mount -t nfs example.tw:/target/ /srv -o nolock

  3. Mostrar montaje del servidor nfs.

    [root@f7915ae635aa /]# showmount example.tw Hosts on example.tw: 10.10.10.1 10.10.10.2


Para la segunda opción que figura en la respuesta aceptada, no estoy seguro de si realmente ha intentado usar el comando "docker run -v" para pasar un recurso compartido de NFS en el host al contenedor de la ventana acoplable como un volumen. Recientemente he intentado hacerlo, a continuación se muestra la información del recurso compartido de nfs en el host:

nfs-server:/path_to_mount on /path_dest type nfs

y entonces:

docker run -it -v /path_dest:/path_in_docker docker_name bash

Pero el demonio docker siempre informa debajo del error:

docker: Error response from daemon: stat /path_dest: permission denied.

Después de muchas búsquedas, encontré que el error en realidad proviene del demonio docker, que se ejecuta como "root" . Cuando la ventana acoplable ejecuta un contenedor con volumen para montar, solicitará el demonio de la ventana acoplable para montarlo. El problema es que el servidor NFS manejará la "raíz" de manera diferente. De forma predeterminada, el servidor NFS asignará la "raíz" a "nadie" , lo que provocará el mensaje de error: reference


Para usar el mount , necesitará la capacidad CAP_SYS_ADMIN , que Docker CAP_SYS_ADMIN al crear el contenedor.

Hay varias soluciones para esto:

  1. Inicie el contenedor con el --privileged=true . Esto hace que Docker no descargue ninguna capacidad, lo que debería permitirle montar un recurso compartido NFS desde dentro del contenedor. Esto podría ser un problema de seguridad; No hagas esto en recipientes que no sean de confianza.
  2. Monte el recurso compartido NFS en el host y páselo en el contenedor como un volumen de host:

    you@host > mount server:/dir /path/to/mount/point you@host > docker run -v /path/to/mount/point:/path/to/mount/point

  3. Use un complemento de volumen Docker (como el complemento Netshare ) para montar directamente el recurso compartido NFS como un volumen contenedor:

    you@host > docker run / --volume-driver=nfs / -v server/dir:/path/to/mount/point / centos