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 mount
necesitarás el CAP_SYS_ADMIN
capacidad, que Docker descarta al crear el contenedor.
Hay varias soluciones para esto:
- Comience el contenedor con el
--cap-add sys_admin
bandera. Esto hace que Docker conserve laCAP_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]. -
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
-
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