Como usar o comando docker port para listar mapeamentos de portas de containers

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar o comando docker port para inspecionar os mapeamentos de portas de um container Docker em execução. Começaremos lançando um container Nginx com portas publicadas e, em seguida, exploraremos como listar todos os mapeamentos de portas publicados para o container.

Você também aprenderá como listar mapeamentos de portas TCP e UDP específicos, e entender o comportamento ao consultar um mapeamento UDP inexistente. Por fim, demonstraremos como listar um mapeamento de porta publicado específico sem especificar explicitamente o protocolo.

Iniciar um container com portas publicadas

Nesta etapa, aprenderemos como iniciar um container Docker e publicar suas portas na máquina host. Publicar portas permite o acesso externo aos serviços em execução dentro do container.

Primeiro, vamos baixar a imagem nginx do Docker Hub. Esta imagem contém um servidor web simples que podemos usar para demonstração.

docker pull nginx

Você deve ver uma saída indicando que a imagem está sendo baixada. Uma vez que o download estiver completo, você pode verificar se a imagem está disponível localmente executando:

docker images

Agora, iniciaremos um container nginx e publicaremos a porta 80 dentro do container para a porta 8080 na máquina host. A flag -d executa o container em modo detached (em segundo plano), a flag -p mapeia as portas, e nginx é o nome da imagem.

docker run -d -p 8080:80 nginx

A saída será o ID do container. Isso significa que o container foi iniciado com sucesso e sua porta interna 80 está acessível através da porta 8080 na sua VM LabEx.

Para verificar se o servidor web está em execução e acessível, você pode usar curl para acessar a porta publicada na máquina host.

curl http://localhost:8080

Você deve ver a saída HTML da página de boas-vindas padrão do Nginx no seu terminal. Isso confirma que o mapeamento de portas está funcionando corretamente e você pode acessar o serviço em execução dentro do container a partir do host.

Listar todos os mapeamentos de portas publicadas para o container

Nesta etapa, aprenderemos como listar os mapeamentos de portas publicados para um container Docker em execução. Isso é útil para confirmar quais portas estão expostas e como elas são mapeadas para o host.

Podemos usar o comando docker port seguido pelo ID ou nome do container para listar todos os mapeamentos de portas publicados para um container específico. Primeiro, vamos obter o ID do container nginx que iniciamos na etapa anterior.

docker ps -q --filter ancestor=nginx

Este comando exibirá o ID do container. Copie este ID, pois o usaremos no próximo comando.

Agora, use o comando docker port com o ID do container para listar os mapeamentos de portas. Substitua <container_id> pelo ID real que você obteve.

docker port <container_id>

Você deve ver uma saída semelhante a 80/tcp -> 0.0.0.0:8080. Isso indica que a porta interna 80 do container (usando o protocolo TCP) está mapeada para a porta 8080 em todas as interfaces do host (0.0.0.0).

Este comando é uma maneira rápida de ver todos os mapeamentos de portas configurados para um container em execução.

Listar um mapeamento específico de porta TCP publicada

Nesta etapa, refinaremos nosso uso do comando docker port para listar um mapeamento de porta publicada específica, incluindo o protocolo. Isso é útil quando um container expõe múltiplas portas com diferentes protocolos.

Para listar um mapeamento de porta TCP publicada específica, adicionamos a porta do container e o protocolo (/tcp) ao comando docker port. Primeiro, obtenha o ID do container novamente, caso não o tenha à mão.

docker ps -q --filter ancestor=nginx

Agora, use o comando docker port com o ID do container e especifique a porta interna 80 com o protocolo TCP. Substitua <container_id> pelo ID do seu container.

docker port < container_id > 80/tcp

A saída deve ser 0.0.0.0:8080. Isso mostra especificamente o endereço e a porta do host aos quais a porta TCP interna 80 do container está mapeada. Isso é mais preciso do que listar todas as portas se você se importa apenas com um mapeamento e protocolo em particular.

Listar um mapeamento específico de porta UDP publicada (esperar erro)

Nesta etapa, tentaremos listar um mapeamento de porta UDP publicada específica para nosso container nginx. Como o Nginx normalmente usa apenas TCP para seu servidor web, esperamos que este comando não encontre um mapeamento UDP e potencialmente retorne um erro ou nenhuma saída. Isso demonstra como especificar o protocolo ao consultar mapeamentos de portas e o que acontece quando um mapeamento para esse protocolo não existe.

Primeiro, obtenha o ID do container do seu nginx.

docker ps -q --filter ancestor=nginx

Agora, use o comando docker port com o ID do container e especifique a porta interna 80 com o protocolo UDP (/udp). Substitua <container_id> pelo ID do seu container.

docker port < container_id > 80/udp

Você deve observar que este comando não produz nenhuma saída ou uma mensagem de erro. Isso ocorre porque o container nginx, conforme configurado, não expõe a porta 80 usando o protocolo UDP. Isso destaca a importância de especificar o protocolo correto ao consultar mapeamentos de portas.

Listar um mapeamento de porta publicada específica sem especificar o protocolo

Nesta etapa, aprenderemos como listar um mapeamento de porta publicada específica sem especificar explicitamente o protocolo (TCP ou UDP). Quando o protocolo é omitido, docker port listará mapeamentos para TCP e UDP para a porta do container especificada.

Primeiro, obtenha o ID do container do seu nginx.

docker ps -q --filter ancestor=nginx

Agora, use o comando docker port com o ID do container e especifique a porta interna 80 sem o protocolo. Substitua <container_id> pelo ID do seu container.

docker port < container_id > 80

Como nosso container nginx tem apenas um mapeamento TCP para a porta 80, a saída será 80/tcp -> 0.0.0.0:8080. Se o container tivesse mapeamentos TCP e UDP para a porta 80, ambos seriam listados. Esta é uma maneira conveniente de ver todos os mapeamentos para uma porta interna específica, independentemente do protocolo.

Resumo

Neste laboratório, aprendemos como iniciar um container Docker e publicar suas portas internas para a máquina host usando o comando docker run -p. Demonstramos isso executando um container Nginx e mapeando sua porta interna 80 para a porta host 8080, verificando a acessibilidade com curl.

Posteriormente, exploramos o comando docker port para listar os mapeamentos de portas publicadas de um container em execução. Aprendemos como listar todas as portas publicadas e como consultar mapeamentos de portas TCP ou UDP específicos, entendendo que a consulta de um mapeamento UDP inexistente resultaria em um erro. Também praticamos a listagem de um mapeamento de porta específico sem especificar explicitamente o protocolo.