Gestión de las Configuraciones de Puertos del Contenedor
Ahora que entendemos cómo inspeccionar y acceder a los servicios en contenedores, exploremos algunos conceptos adicionales de gestión de puertos.
Escenarios Comunes de Gestión de Puertos
Aquí hay algunos escenarios comunes que podría encontrar:
1. Cambiando los Mapeos de Puertos
Si el puerto 8080 ya está en uso en su host, puede mapear a un puerto diferente:
docker stop web-demo
docker rm web-demo
docker run -d --name web-demo -p 8081:80 nginx
Ahora el contenedor Nginx es accesible en el puerto 8081:
curl localhost:8081
2. Enlazando a Interfaces Específicas
En lugar de enlazar a todas las interfaces (0.0.0.0), puede enlazar a una IP específica:
docker stop web-demo
docker rm web-demo
docker run -d --name web-demo -p 127.0.0.1:8080:80 nginx
Esto enlaza el puerto del contenedor solo a la interfaz de localhost, haciéndolo inaccesible desde fuera del host.
3. Usando Puertos Host Aleatorios
Si no le importa qué puerto host se utiliza, deje que Docker asigne uno:
docker stop web-demo
docker rm web-demo
docker run -d --name web-demo -P nginx
La bandera -P publica todos los puertos expuestos a puertos aleatorios en el host.
Verifique el puerto asignado:
docker port web-demo
Salida:
80/tcp -> 0.0.0.0:49153
El número de puerto exacto variará, pero en este ejemplo, el puerto 80 se mapeó al puerto 49153.
Solución de Problemas Comunes de Puertos
Aquí hay soluciones a problemas comunes relacionados con los puertos:
- Puerto ya en Uso: Si ve un error como "el puerto ya está asignado", elija un puerto diferente:
docker run -d --name another-web -p 8082:80 nginx
- El Contenedor no Puede Conectarse al Host: Si un contenedor necesita conectarse a un servicio en el host, use el nombre DNS especial de Docker
host.docker.internal en lugar de localhost:
docker run --rm alpine ping -c 2 host.docker.internal
- Verificando Qué Proceso Usa un Puerto: Si un puerto ya está en uso en el host, encuentre el proceso:
sudo lsof -i :8080
Limpieza
Limpiemos nuestros contenedores:
docker stop web-demo redis-demo
docker rm web-demo redis-demo