Cómo usar el comando docker container port para listar mapeos de puertos

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás a utilizar el comando docker port para inspeccionar los mapeos de puertos de un contenedor Docker en ejecución. Comenzaremos lanzando un contenedor Nginx con puertos publicados, luego exploraremos cómo listar todos los mapeos de puertos publicados para el contenedor.

También aprenderás a listar mapeos específicos de puertos TCP y UDP publicados, y comprenderás el comportamiento al consultar un mapeo UDP inexistente. Finalmente, demostraremos cómo listar un mapeo de puerto publicado específico sin especificar explícitamente el protocolo.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/port("List Container Ports") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/run -.-> lab-555116{{"Cómo usar el comando docker container port para listar mapeos de puertos"}} docker/ps -.-> lab-555116{{"Cómo usar el comando docker container port para listar mapeos de puertos"}} docker/port -.-> lab-555116{{"Cómo usar el comando docker container port para listar mapeos de puertos"}} docker/pull -.-> lab-555116{{"Cómo usar el comando docker container port para listar mapeos de puertos"}} docker/images -.-> lab-555116{{"Cómo usar el comando docker container port para listar mapeos de puertos"}} end

Iniciar un contenedor con puertos publicados

En este paso, aprenderemos cómo iniciar un contenedor Docker y publicar sus puertos en la máquina host. Publicar puertos permite el acceso externo a los servicios que se ejecutan dentro del contenedor.

Primero, descarguemos la imagen nginx desde Docker Hub. Esta imagen contiene un servidor web simple que podemos usar para la demostración.

docker pull nginx

Deberías ver una salida que indica que la imagen se está descargando. Una vez completada la descarga, puedes verificar que la imagen está disponible localmente ejecutando:

docker images

Ahora, iniciaremos un contenedor nginx y publicaremos el puerto 80 dentro del contenedor al puerto 8080 en la máquina host. La bandera -d ejecuta el contenedor en modo detached (en segundo plano), la bandera -p mapea los puertos, y nginx es el nombre de la imagen.

docker run -d -p 8080:80 nginx

La salida será el ID del contenedor. Esto significa que el contenedor se ha iniciado correctamente y su puerto interno 80 es accesible a través del puerto 8080 en tu VM de LabEx.

Para verificar que el servidor web está en ejecución y accesible, puedes usar curl para acceder al puerto publicado en la máquina host.

curl http://localhost:8080

Deberías ver el HTML de la página de bienvenida predeterminada de Nginx en tu terminal. Esto confirma que el mapeo de puertos funciona correctamente y que puedes acceder al servicio que se ejecuta dentro del contenedor desde el host.

Listar todos los mapeos de puertos publicados del contenedor

En este paso, aprenderemos cómo listar los mapeos de puertos publicados para un contenedor Docker en ejecución. Esto es útil para confirmar qué puertos están expuestos y cómo están mapeados al host.

Podemos usar el comando docker port seguido del ID o nombre del contenedor para listar todos los mapeos de puertos publicados de un contenedor específico. Primero, obtengamos el ID del contenedor nginx que iniciamos en el paso anterior.

docker ps -q --filter ancestor=nginx

Este comando mostrará el ID del contenedor. Copia este ID ya que lo usaremos en el siguiente comando.

Ahora, usa el comando docker port con el ID del contenedor para listar los mapeos de puertos. Reemplaza <container_id> con el ID real que obtuviste.

docker port <container_id>

Deberías ver una salida similar a 80/tcp -> 0.0.0.0:8080. Esto indica que el puerto interno 80 del contenedor (usando protocolo TCP) está mapeado al puerto 8080 en todas las interfaces del host (0.0.0.0).

Este comando es una forma rápida de ver todos los mapeos de puertos configurados para un contenedor en ejecución.

Listar un mapeo de puerto TCP publicado específico

En este paso, refinaremos el uso del comando docker port para listar un mapeo de puerto publicado específico, incluyendo el protocolo. Esto es útil cuando un contenedor expone múltiples puertos con diferentes protocolos.

Para listar un mapeo de puerto TCP publicado específico, añadimos el puerto del contenedor y el protocolo (/tcp) al comando docker port. Primero, obtén nuevamente el ID del contenedor si no lo tienes a mano.

docker ps -q --filter ancestor=nginx

Ahora, usa el comando docker port con el ID del contenedor y especifica el puerto interno 80 con el protocolo TCP. Reemplaza <container_id> con tu ID de contenedor.

docker port < container_id > 80/tcp

La salida debería ser 0.0.0.0:8080. Esto muestra específicamente la dirección del host y el puerto al que está mapeado el puerto TCP interno 80 del contenedor. Este método es más preciso que listar todos los puertos si solo te interesa un mapeo y protocolo particular.

Listar un mapeo de puerto UDP publicado específico (esperando error)

En este paso, intentaremos listar un mapeo de puerto UDP publicado específico para nuestro contenedor nginx. Dado que Nginx normalmente solo utiliza TCP para su servidor web, esperamos que este comando no encuentre un mapeo UDP y potencialmente devuelva un error o ninguna salida. Esto demuestra cómo especificar el protocolo al consultar mapeos de puertos y qué ocurre cuando no existe un mapeo para ese protocolo.

Primero, obtén el ID de tu contenedor nginx.

docker ps -q --filter ancestor=nginx

Ahora, usa el comando docker port con el ID del contenedor y especifica el puerto interno 80 con el protocolo UDP (/udp). Reemplaza <container_id> con tu ID de contenedor.

docker port < container_id > 80/udp

Deberías observar que este comando no produce ninguna salida o muestra un mensaje de error. Esto ocurre porque el contenedor nginx, tal como está configurado, no expone el puerto 80 usando el protocolo UDP. Esto resalta la importancia de especificar el protocolo correcto al consultar mapeos de puertos.

Listar un mapeo de puerto publicado específico sin especificar protocolo

En este paso, aprenderemos cómo listar un mapeo de puerto publicado específico sin indicar explícitamente el protocolo (TCP o UDP). Cuando se omite el protocolo, el comando docker port mostrará los mapeos tanto TCP como UDP para el puerto del contenedor especificado.

Primero, obtén el ID de tu contenedor nginx.

docker ps -q --filter ancestor=nginx

Ahora, usa el comando docker port con el ID del contenedor y especifica el puerto interno 80 sin el protocolo. Reemplaza <container_id> con tu ID de contenedor.

docker port < container_id > 80

Dado que nuestro contenedor nginx solo tiene un mapeo TCP para el puerto 80, la salida será 80/tcp -> 0.0.0.0:8080. Si el contenedor tuviera mapeos tanto TCP como UDP para el puerto 80, ambos aparecerían listados. Esta es una forma conveniente de ver todos los mapeos para un puerto interno particular, independientemente del protocolo.

Resumen

En este laboratorio, aprendimos cómo iniciar un contenedor Docker y publicar sus puertos internos en la máquina host utilizando el comando docker run -p. Demostramos esto ejecutando un contenedor Nginx y mapeando su puerto interno 80 al puerto 8080 del host, verificando la accesibilidad con curl.

Posteriormente, exploramos el comando docker port para listar los mapeos de puertos publicados de un contenedor en ejecución. Aprendimos cómo listar todos los puertos publicados y cómo consultar mapeos específicos de puertos TCP o UDP, comprendiendo que consultar un mapeo UDP inexistente resultaría en un error. También practicamos listar un mapeo de puerto específico sin especificar explícitamente el protocolo.