Práctica: Instalación y configuración de NFS en contenedor Ubuntu Server¶
Objetivos¶
Durante esta práctica aprenderás a instalar y configurar NFS (Network File System) en un contenedor Ubuntu Server 24.04 y a acceder a las carpetas compartidas desde un cliente contenedor y desde la máquina host.
Al finalizar esta práctica serás capaz de:
- Crear y ejecutar contenedores Ubuntu Server con Docker.
- Instalar el servidor NFS (
nfs-kernel-server) dentro del contenedor. - Configurar las exportaciones en
/etc/exports. - Montar carpetas NFS desde un cliente contenedor.
- Comprobar el acceso desde la máquina host (obligatorio).
- Configurar montaje automático en cliente Linux (
/etc/fstab) y en Windows (script de inicio). - Documentar el proceso con capturas de pantalla.
Requisitos previos¶
- Docker instalado en el host (Linux, macOS o Windows).
- Host con soporte NFS: puede ser cualquier sistema (Windows, Linux, macOS o WSL2). Principalmente se usará Windows como host.
NFS en contenedor
El servidor NFS requiere módulos del kernel. El contenedor debe ejecutarse con --privileged para que NFS funcione correctamente.
Formato de /etc/exports
No debe haber espacios entre el cliente y las opciones: ruta cliente(opciones). Un espacio antes de ( provocaría un error.
Paso 0: Crear el contenedor servidor NFS¶
Crea y ejecuta un contenedor Ubuntu Server 24.04 publicando los puertos NFS para que el host pueda conectarse:
# Crear red para que los contenedores se comuniquen
docker network create red-nfs
# Crear y ejecutar contenedor servidor NFS (Ubuntu 24.04)
# --privileged: necesario para módulos del kernel de NFS
# -p: publicar puertos para que el host pueda montar el recurso
docker run -d --name nfs-server --privileged --network red-nfs \
-p 2049:2049 -p 111:111 -p 111:111/udp \
-v nfs-data:/compartida \
ubuntu:24.04 sleep infinity
Entra al contenedor para configurarlo:
docker exec -it nfs-server bash
Captura obligatoria
Realiza una captura del comando docker run y la salida de docker ps mostrando el contenedor en ejecución.
Parte 1: Configuración del servidor NFS (dentro del contenedor)¶
1.1 Actualización e instalación¶
Dentro del contenedor nfs-server:
apt update
apt install nfs-kernel-server nano -y
El paquete nfs-kernel-server instala como dependencias:
- nfs-common: programas para usar NFS (cliente y servidor):
lockd,statd,showmount,nfsstat. - rpcbind: servicio que convierte identificadores RPC en direcciones universales.
1.2 Crear carpeta compartida y permisos¶
La carpeta /compartida ya existe (volumen montado). Asigna permisos:
chown nobody:nogroup /compartida
chmod 777 /compartida
Captura obligatoria
Captura la salida de ls -la /compartida mostrando los permisos asignados.
1.3 Configurar exportaciones (modificación de archivos)¶
Archivo a modificar: /etc/exports (dentro del contenedor servidor)
Pasos para editar:
- Ejecuta
nano /etc/exports - Añade una sola línea al final del archivo (o sustituye el contenido si está vacío)
- Escribe exactamente:
/compartida *(rw,sync,no_subtree_check,insecure) - Importante: no debe haber espacio entre
*y(rw,...)— un espacio provocaría error - Guarda: Ctrl+O, Enter, Ctrl+X
Contenido que debe quedar en el archivo:
/compartida *(rw,sync,no_subtree_check,insecure)
Verifica el contenido con:
cat /etc/exports
La salida esperada debe ser exactamente:
/compartida *(rw,sync,no_subtree_check,insecure)
Captura obligatoria
Realiza una captura mostrando la salida de cat /etc/exports con la línea correcta.
Opciones de /etc/exports
| Opción | Descripción |
|---|---|
* |
Cualquier cliente puede acceder (comodín) |
rw |
Lectura y escritura |
ro |
Solo lectura (predeterminado) |
sync |
Escribir en disco antes de confirmar (recomendado) |
no_subtree_check |
Mejor rendimiento; desactiva verificación de subárbol |
insecure |
Permite clientes en puertos > 1024 (necesario en contenedores) |
root_squash |
root remoto se trata como nobody (seguridad) |
no_root_squash |
Desactiva root_squash (menos seguro) |
1.4 Iniciar servicios e exportar¶
# Iniciar rpcbind (requerido por NFS)
service rpcbind start
# Iniciar NFS
service nfs-kernel-server start
# Aplicar exportaciones
exportfs -a
# Verificar estado del servicio
service nfs-kernel-server status
# Verificar exportaciones
exportfs -v
showmount -e localhost
La salida de showmount -e localhost debe mostrar /compartida y la de exportfs -v debe confirmar las opciones.
Captura obligatoria
Realiza una captura mostrando la salida de exportfs -v y showmount -e localhost.
Si el servicio no arranca
En algunos contenedores minimales puedes iniciar los daemons manualmente: rpcbind, rpc.nfsd 8, rpc.mountd.
1.5 Crear archivo de prueba en el servidor¶
Para confirmar que la carpeta está accesible:
touch /compartida/prueba_servidor.txt
ls -la /compartida
1.6 Salir del contenedor¶
exit
Parte 2: Cliente en contenedor Ubuntu¶
Crea un contenedor cliente en la misma red (Ubuntu 24.04):
docker run -d --name nfs-cliente --network red-nfs \
ubuntu:24.04 sleep infinity
Entra al cliente e instala el paquete NFS:
docker exec -it nfs-cliente bash
Dentro del cliente:
apt update
apt install nfs-common -y
# Crear punto de montaje
mkdir -p /mnt/nfs
# Montar (usa el nombre del contenedor servidor como hostname)
# NFSv4 es el predeterminado en Ubuntu 24.04
mount -t nfs nfs-server:/compartida /mnt/nfs
# Verificar
df -h
ls -la /mnt/nfs
# Crear archivo de prueba
echo "Prueba NFS desde contenedor" > /mnt/nfs/test_contenedor.txt
cat /mnt/nfs/test_contenedor.txt
Sal del cliente: exit
Captura obligatoria
Captura el montaje, df -h, ls -la /mnt/nfs y el archivo creado.
Parte 3: Comprobación desde la máquina host (obligatorio)¶
Comprobación obligatoria
La verificación desde el host es obligatoria y no puede omitirse. Demuestra la interoperabilidad entre el contenedor NFS y el sistema anfitrión. Sin esta comprobación la práctica no se considera completada.
3.1 Requisitos del host¶
El host puede ser cualquier sistema, principalmente Windows:
- Windows (Pro/Enterprise/Education): activar Cliente para NFS (ver 3.2).
- WSL2 (Windows): usar Ubuntu en WSL2 con
nfs-common(ver 3.2b). - Linux (Ubuntu, Debian, etc.):
sudo apt install nfs-common(ver 3.2c). - macOS: soporte NFS nativo (ver 3.2d).
3.2 Montar desde Windows (principal)¶
En Windows 10/11 (PowerShell o CMD como administrador):
-
Activar Cliente para NFS: - Ejecutar
appwiz.cpl(Win+R) → Activar o desactivar características de Windows - O: Configuración → Aplicaciones → Características opcionales → Más características de Windows - Buscar Servicios para NFS → expandir → marcar Cliente para NFS y Herramientas administrativas - Reiniciar si es necesario. -
Montar el recurso (usa una letra de unidad libre, por ejemplo
N:):
mount localhost:/compartida N:
- Verificar (Explorador de archivos o CMD):
dir N:
Deberías ver test_contenedor.txt y prueba_servidor.txt. Crear archivo de prueba:
echo Prueba NFS desde HOST > N:\test_host.txt
type N:\test_host.txt
- Desmontar al finalizar:
umount N:
Windows Home
En Windows Home el Cliente NFS no está disponible. Usa WSL2 (apartado 3.2b) como alternativa.
Montaje automático en Windows (opcional)
Para montar NFS al iniciar Windows, crea un archivo nfs.bat en la carpeta de inicio:
- Ejecutar shell:startup para abrir la carpeta Inicio
- Crear nfs.bat con contenido: mount -o anon localhost:/compartida N:
- El script se ejecutará al iniciar sesión.
3.2b Montar desde WSL2 (alternativa en Windows)¶
En la distribución Ubuntu de WSL2, en una terminal del host:
sudo apt install nfs-common -y
sudo mkdir -p /mnt/nfs-host
sudo mount -t nfs localhost:/compartida /mnt/nfs-host
ls -la /mnt/nfs-host
echo "Prueba NFS desde HOST" | sudo tee /mnt/nfs-host/test_host.txt
sudo umount /mnt/nfs-host
3.2c Montar desde Linux¶
sudo apt install nfs-common -y
sudo mkdir -p /mnt/nfs-host
sudo mount -t nfs localhost:/compartida /mnt/nfs-host
ls -la /mnt/nfs-host
echo "Prueba NFS desde HOST" | sudo tee /mnt/nfs-host/test_host.txt
sudo umount /mnt/nfs-host
Montaje automático en Linux (opcional)
Para montar al arrancar, añade en /etc/fstab:
localhost:/compartida /mnt/nfs-host nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
nofail y auto evitan que el sistema falle si el servidor NFS no está disponible al arrancar.
3.2d Montar desde macOS¶
sudo mkdir -p /mnt/nfs-host
sudo mount -t nfs -o resvport localhost:/compartida /mnt/nfs-host
ls -la /mnt/nfs-host
echo "Prueba NFS desde HOST" | sudo tee /mnt/nfs-host/test_host.txt
sudo umount /mnt/nfs-host
3.3 Comprobar en el contenedor servidor¶
El archivo creado desde el host debe ser visible en el contenedor:
docker exec -it nfs-server ls -la /compartida
Debes ver test_contenedor.txt, test_host.txt y prueba_servidor.txt.
Captura obligatoria
Realiza una captura mostrando: montaje en el host, listado de archivos (en Windows: dir N:; en Linux/macOS/WSL2: ls -la /mnt/nfs-host), creación de test_host.txt y verificación con docker exec nfs-server ls -la /compartida (todos los archivos visibles).
Si mount falla con «Connection refused»
Verifica que los puertos están publicados: docker port nfs-server. Debe mostrar 2049 y 111. Reinicia el contenedor si es necesario.
Problemas de acceso en Windows
- Permisos de carpetas superiores: configurar a 755 si hay errores.
- Usar la ruta completa en
/etc/exportssi se usa~(virgulilla).
Verificación final¶
Resumen de comprobaciones obligatorias:
- Desde contenedor cliente: archivo
test_contenedor.txtcreado y visible. - Desde host: montaje correcto (en Windows: unidad
N:; en Linux/macOS/WSL2:/mnt/nfs-host), archivotest_host.txtcreado. - En servidor: todos los archivos visibles con
docker exec nfs-server ls -la /compartida.
Limpieza¶
Para eliminar los contenedores y la red al finalizar:
# Desmontar primero si montaste en el host
# Windows: umount N:
# Linux/macOS/WSL2: sudo umount /mnt/nfs-host
docker stop nfs-server nfs-cliente
docker rm nfs-server nfs-cliente
docker network rm red-nfs
docker volume rm nfs-data
Entregables¶
- Documento con capturas de:
- Creación del contenedor servidor NFS (comando
docker runydocker ps). - Permisos de la carpeta compartida (
ls -la /compartida). - Contenido de
/etc/exports(salida decat /etc/exports). - Salida de
exportfs -vyshowmount -e. - Montaje y acceso desde el contenedor cliente.
- Montaje y acceso desde la máquina host (obligatorio; Windows, Linux, macOS o WSL2; incluir montaje, listado, creación de
test_host.txty verificación en servidor). - Archivos visibles en el servidor (
docker exec nfs-server ls -la /compartida).
- Explicación de las opciones utilizadas en
/etc/exportsy por qué se usa--privilegeden el contenedor.
Criterios de evaluación¶
- Contenedor Ubuntu Server 24.04 creado correctamente con puertos publicados.
- Instalación correcta del servidor NFS dentro del contenedor.
- Configuración correcta de
/etc/exports(formato sin espacios erróneos). - Montaje correcto desde el contenedor cliente.
- Comprobación obligatoria desde la máquina host (montaje, lectura, escritura).
- Verificación de que los archivos creados desde cliente y host son visibles en el servidor.
- Documentación completa con todas las capturas requeridas.