Saltar al contenido

Montaje de recursos compartidos nfs dentro del contenedor docker

Pudiera darse el caso de que encuentres algún error en tu código o proyecto, recuerda probar siempre en un entorno de testing antes aplicar el código al trabajo final.

Solución:

A partir de la ventana acoplable 17.06, puede montar recursos compartidos de NFS en el contenedor directamente cuando lo ejecuta, sin 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

Obtuve la pista de https://github.com/moby/moby/issues/28809

Para usar mountnecesitarás el CAP_SYS_ADMIN capacidad, que Docker descarta al crear el contenedor.

Hay varias soluciones para esto:

  1. Comience el contenedor con el --cap-add sys_admin bandera. Esto hace que Docker conserve la CAP_SYS_ADMIN capacidad, que debería permitirle montar un recurso compartido NFS desde dentro del contenedor. Esto podría ser un problema de seguridad; no haga esto en contenedores que no sean de confianza. [A previous version of this answer suggested using the --privileged=true to retain all capabilities, thanks to @earcam for the suggestion to use --cap-add instead].
  2. Monte el recurso compartido NFS en el host y páselo al contenedor como un volumen de host:

    [email protected] > mount server:/dir /path/to/mount/point
    [email protected] > 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:

    [email protected] > docker run 
      --volume-driver=nfs 
      -v server/dir:/path/to/mount/point 
      centos
    

Para la segunda opción enumerada en la respuesta aceptada, no estoy seguro de si realmente ha intentado usar el "docker run -v" Comando para pasar un recurso compartido NFS en el host al contenedor docker como un volumen. Recientemente intenté hacerlo, a continuación se muestra la información para compartir nfs en el host:

nfs-server:/path_to_mount on /path_dest type nfs

y luego:

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

Pero el demonio docker siempre informa el siguiente error:

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

Después de muchas búsquedas, descubrí que el error en realidad proviene del demonio docker, que se ejecuta como “raíz”. Cuando docker ejecuta un contenedor con volumen para montar, solicitará al demonio docker que lo monte. El problema es que el servidor NFS manejará “raíz” diferentemente. De forma predeterminada, el servidor NFS asignará el “raíz” para “nadie”causando el mensaje de error: referencia

Aquí puedes ver las reseñas y valoraciones de los usuarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *