Servidor web con Docker: publica una página local
Puedes servir una página HTML con Nginx en Docker sin instalar el servidor web directamente en tu sistema. Este laboratorio utiliza una carpeta del host y un puerto ligado a loopback para comprobar el recorrido completo de una petición.
Necesitas Docker y una terminal. Trabaja en una carpeta nueva para evitar montar por accidente documentos privados dentro del sitio.
Prepara el contenido
Crea una carpeta sitio y guarda allí index.html:
<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Laboratorio web</title>
</head>
<body>
<h1>Mi página de prueba</h1>
<p>Contenido estático servido desde un contenedor.</p>
</body>
</html>
El archivo es deliberadamente sencillo. Antes de probar un sitio completo, conviene confirmar que Nginx lee exactamente la carpeta que esperas.
Ejecuta Nginx
Desde el directorio que contiene sitio:
docker run -d --name web-lab \
-p 127.0.0.1:8080:80 \
--mount type=bind,src="$PWD/sitio",dst=/usr/share/nginx/html,readonly \
nginx:stable-alpine
docker ps --filter name=web-lab
curl -i http://127.0.0.1:8080
El montaje es de solo lectura para el contenedor. Evita que Nginx modifique esos archivos, aunque no convierte todo el servicio en un entorno aislado de cualquier riesgo.
Si el puerto 8080 está ocupado, elige otro para la práctica. No detengas un proceso desconocido solo para liberar el puerto del ejemplo.
Cambia contenido y comprueba
Modifica el párrafo de index.html y vuelve a solicitar la página. Si no ves el cambio, comprueba la ruta montada y la caché del navegador.
docker inspect web-lab
docker logs --tail 30 web-lab
La salida de inspect puede contener información de configuración de otros proyectos si la compartes indiscriminadamente. Revisa únicamente lo necesario para esta práctica.
Usa Compose para conservar la configuración
Guarda compose.yaml:
services:
web:
image: nginx:stable-alpine
ports:
- "127.0.0.1:8080:80"
volumes:
- ./sitio:/usr/share/nginx/html:ro
Detén el contenedor de la prueba anterior antes de iniciar este proyecto con el mismo puerto. Ejecuta config --quiet, up -d y logs para validar y revisar.
Errores frecuentes
Una página de bienvenida distinta puede indicar que no montaste la carpeta esperada. Un 403 puede provenir de permisos o de la ausencia de un índice utilizable. Un 404 exige comprobar ruta y nombre, incluyendo mayúsculas.
En sistemas con políticas adicionales de seguridad, revisa el tratamiento de mounts de la plataforma. No resuelvas un error de lectura abriendo todos los permisos o montando el directorio raíz del host.
Qué falta para una publicación real
El ejemplo no configura DNS, certificado, redirecciones, política de actualización ni protección del host. Para una web pública, decide dónde termina TLS y cómo se renuevan los certificados.
No asumas que ejecutar Certbot en el host modifica automáticamente un Nginx dentro de Docker. El proxy o servidor que atiende la petición debe poder utilizar la configuración y los certificados correctos.
Limpieza
Detén y elimina el contenedor cuando termines. Los archivos de sitio continúan en el host. Antes de borrar la carpeta, verifica que solo contiene material del laboratorio.
Preguntas frecuentes
¿Puedo servir una aplicación PHP con esta imagen sin cambios?
No. Nginx sirve contenido y puede actuar como proxy; procesar PHP requiere un backend apropiado y configuración adicional.
¿Por qué localhost no abre desde mi teléfono?
En el teléfono, localhost es el propio teléfono. Además, este ejemplo publica únicamente en loopback del host, de forma intencional.
¿El montaje de solo lectura protege mis archivos originales?
Limita la escritura desde ese montaje, pero debes controlar permisos y accesos del host y conservar respaldo de los archivos importantes.
En pocas palabras
Un contenedor Nginx puede servir archivos estáticos mediante un montaje de solo lectura. La publicación local permite practicar sin abrir un servicio directamente a internet.
Conclusión
Conserva los archivos y la configuración del proyecto y verifica su recreación. Si vas a publicarlo, añade dominio, TLS y mantenimiento con un diseño que puedas supervisar y recuperar.
Para continuar, revisa Docker: qué es y cómo usarlo para ejecutar contenedores y Cómo instalar Docker en Ubuntu 24.04: guía práctica paso a paso.
