En esta lección aprenderás instrucción EXPOSE Dockerfile y una diferencia clave: EXPOSE documenta qué puerto espera usar la aplicación, pero no publica ese puerto automáticamente en tu máquina.
Esto evita una confusión muy común al empezar con Dockerfile: escribir EXPOSE 80 no equivale a usar docker run -p 8080:80. Son pasos relacionados, pero no son lo mismo.
👉 Y recuerda, si quieres aprender más de Linux, pincha en este curso de Linux gratis
🐳 Si quieres aprender más de Docker, pincha en este curso de Docker gratis
Qué hace la instrucción EXPOSE Dockerfile
Problema: una imagen puede contener una aplicación web, API o servicio que escucha en un puerto interno, pero otras personas no siempre saben cuál es.
Qué aporta Docker: EXPOSE deja documentado en la imagen el puerto previsto. Herramientas, humanos y Compose pueden usar esa información como pista, aunque la publicación real depende de cómo arranques el contenedor.
| Concepto | Qué significa |
|---|---|
| EXPOSE 80 | La imagen declara que la app escucha en el puerto 80 dentro del contenedor. |
| docker run -p 8080:80 | Publica el puerto 80 del contenedor como 8080 en el host. |
| Sin -p | El contenedor puede escuchar internamente, pero no queda accesible desde fuera por ese puerto. |
Ejemplo práctico
FROM nginx:stable-alpine
COPY ./public /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]docker build -t web-expose-demo:1.0 .
docker run -d --name web-expose-demo -p 8080:80 web-expose-demo:1.0
docker ps --filter "name=web-expose-demo"En el Dockerfile, EXPOSE 80 documenta el puerto interno. En el comando docker run, -p 8080:80 es lo que hace accesible la aplicación desde el host.
Errores comunes
- Creer que EXPOSE publica el puerto: no lo hace; necesitas -p, Compose ports o una configuración equivalente.
- Exponer puertos que la aplicación no usa: confunde a quien mantenga la imagen.
- Confundir puerto interno y externo: en -p 8080:80, 8080 es host y 80 es contenedor.
- Usar EXPOSE como medida de seguridad: no abre ni cierra firewall; solo documenta intención.
Advertencia: no asumas que un puerto está protegido solo porque no aparece en EXPOSE. La seguridad depende de red, publicación de puertos, firewall y permisos reales.
Lecciones relacionadas del curso Docker
- Instrucción FROM
- Instrucción RUN Dockerfile
- Instrucción CMD
- Instrucción ENTRYPOINT
- Cómo publicar puertos en Docker
Documentación oficial y recursos
La instrucción EXPOSE Dockerfile queda bien usada cuando comunica el puerto interno esperado sin prometer publicación automática.
Cuando necesites acceso desde fuera del contenedor, combina esta documentación con -p, Compose o la configuración de red adecuada.
