Puertos Docker: configuración y uso
16:52, 02.06.2026
Introducción
Docker ha cambiado radicalmente el enfoque de los desarrolladores a la hora de crear, implementar y gestionar aplicaciones gracias al uso de la contenedorización. Uno de los componentes clave del trabajo con contenedores Docker es la gestión de los puertos, que son necesarios para la comunicación entre tus servicios en contenedores y el mundo exterior. Tanto si abres un servidor web en el puerto 80 como si abres tu propia aplicación en el 8080, comprender la configuración de los puertos de Docker es fundamental para una orquestación eficaz de los contenedores.
Este artículo te explicará qué es el mapeo de puertos en Docker, por qué es importante y cómo configurarlo, incluso para contenedores ya en ejecución.
Por qué es importante el mapeo de puertos
Por defecto, los contenedores están aislados del sistema host. Cuando una aplicación en contenedor escucha internamente en un puerto determinado, ese puerto debe estar explícitamente mapeado a un puerto de la máquina host para que sea accesible desde el exterior.
Ejemplo: docker run -p 8080:80 nginx
Esto vincula el puerto 80 dentro del contenedor al puerto 8080 del host, haciendo que el servidor NGINX sea accesible a través de localhost:8080.
Sin mapeo de puertos:
- Sigue siendo imposible acceder a las aplicaciones desde fuera de la red de Docker.
- Los servicios no pueden interactuar entre contenedores o sistemas.
- El desarrollo y la depuración se vuelven más complejos.
Cómo añadir una nueva asignación de puertos a un contenedor en ejecución
Docker no admite la adición de nuevas asignaciones de puertos directamente a un contenedor que ya está en ejecución. La opción -p solo funciona durante la fase de creación del contenedor (docker run).
Para abrir un nuevo puerto:
- Debes volver a crear el contenedor con la nueva configuración de puertos.
- Como alternativa, utiliza un método alternativo, por ejemplo, mediante Docker commit y reinicio (descrito a continuación).
Reiniciar el contenedor con la configuración actualizada
Si deseas actualizar la asignación de puertos:
Pasos:
- Detenga el contenedor:
docker stop <container_name_or_id> - Elimine el contenedor (los datos permanecerán intactos si se utilizan volúmenes):
docker rm <container_name_or_id> - Vuelva a crearlo con las nuevas asignaciones de puertos:
docker run -d -p 8080:80 --name my-nginx nginx Asegúrese de haber conservado todos los volúmenes, variables de entorno o redes necesarios al volver a crear el contenedor.
Reinicie con Docker Commit
Si el contenedor en ejecución tiene configuraciones propias que no desea perder:
Pasos:
- Guarde el estado del contenedor en una nueva imagen:
docker commit <container_id> myimage:withports - Inicie un nuevo contenedor a partir de la imagen comprometida con los puertos actualizados:
docker run -d -p 8080:80 --name new_container myimage:withports Este método permite conservar el sistema de archivos actual del contenedor, al tiempo que se abren nuevos puertos.
Cómo modificar la configuración de Docker sobre la marcha
Aunque Docker no permite cambiar los puertos de los contenedores en tiempo real, puedes realizar cambios más amplios en la configuración de Docker para el comportamiento futuro de los contenedores o con fines de depuración.
1. Detener el contenedor y el servicio de Docker
Detenga el contenedor y, a continuación, el daemon de Docker (puede que necesite sudo):
docker stop <container_name> sudo systemctl stop docker
2. Búsqueda de archivos de configuración
La configuración de Docker suele encontrarse en:
- Linux: /etc/docker/daemon.json
- Windows/Mac (Docker Desktop): a través de la interfaz gráfica o en ~/.docker/config.json
3. Realizar cambios en la configuración
Edita el archivo daemon.json para definir tus propias asignaciones de puertos o funciones experimentales.
Ejemplo:
{
"iptables": true,
"default-address-pools": [
{
"base": "10.10.0.0/16",
"size": 24
}
]
}Nota: Las asignaciones de puertos no se modifican directamente aquí, pero se pueden configurar otros parámetros de funcionamiento de la red.
4. Comprobación de la configuración actualizada
Comprueba si hay errores sintácticos:
sudo dockerd --config-file /etc/docker/daemon.json --debug
Si todo va bien, reinicia el servicio Docker:
sudo systemctl start docker
5. Aplicación de la nueva asignación de puertos al contenedor en ejecución
Tras reiniciar Docker:
- Cree un nuevo contenedor con la asignación de puertos deseada.
- Utilice docker exec, docker cp o la conexión de volúmenes para transferir datos desde el contenedor anterior, si es necesario.
Conclusión
La asignación de puertos en Docker es la base para el despliegue de aplicaciones de red accesibles. Aunque Docker no permite cambiar los puertos sobre la marcha para los contenedores activos, existen procesos fiables para reconfigurar los contenedores con nuevos ajustes, incluyendo la congelación de contenedores y su recreación. Comprender estas prácticas garantiza el mantenimiento de la operatividad, la disponibilidad y la escalabilidad en entornos contenedorizados.