Comment utiliser la commande docker container port pour lister les mappages de ports

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce labo (lab), vous apprendrez à utiliser la commande docker port pour inspecter les mappages de ports d'un conteneur Docker en cours d'exécution. Nous commencerons par lancer un conteneur Nginx avec des ports publiés, puis nous explorerons comment lister tous les mappages de ports publiés pour le conteneur.

Vous apprendrez également comment lister des mappages de ports TCP et UDP spécifiques, et comprendrez le comportement lors de l'interrogation d'un mappage UDP inexistant. Enfin, nous démontrerons comment lister un mappage de port publié spécifique sans explicitement spécifier le protocole.


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{{"Comment utiliser la commande docker container port pour lister les mappages de ports"}} docker/ps -.-> lab-555116{{"Comment utiliser la commande docker container port pour lister les mappages de ports"}} docker/port -.-> lab-555116{{"Comment utiliser la commande docker container port pour lister les mappages de ports"}} docker/pull -.-> lab-555116{{"Comment utiliser la commande docker container port pour lister les mappages de ports"}} docker/images -.-> lab-555116{{"Comment utiliser la commande docker container port pour lister les mappages de ports"}} end

Démarrer un conteneur avec des ports publiés

Dans cette étape, nous allons apprendre à démarrer un conteneur Docker et publier ses ports sur la machine hôte. La publication des ports permet un accès externe aux services exécutés à l'intérieur du conteneur.

Tout d'abord, téléchargeons l'image nginx depuis Docker Hub. Cette image contient un serveur web simple que nous pouvons utiliser pour la démonstration.

docker pull nginx

Vous devriez voir une sortie indiquant que l'image est en cours de téléchargement. Une fois le téléchargement terminé, vous pouvez vérifier que l'image est disponible localement en exécutant :

docker images

Maintenant, nous allons démarrer un conteneur nginx et publier le port 80 à l'intérieur du conteneur vers le port 8080 sur la machine hôte. Le drapeau -d exécute le conteneur en mode détaché (en arrière-plan), le drapeau -p mappe les ports, et nginx est le nom de l'image.

docker run -d -p 8080:80 nginx

La sortie sera l'ID du conteneur. Cela signifie que le conteneur a démarré avec succès et que son port interne 80 est accessible via le port 8080 sur votre VM LabEx.

Pour vérifier que le serveur web fonctionne et est accessible, vous pouvez utiliser curl pour accéder au port publié sur la machine hôte.

curl http://localhost:8080

Vous devriez voir le code HTML de la page d'accueil par défaut de Nginx dans votre terminal. Cela confirme que le mappage de ports fonctionne correctement et que vous pouvez accéder au service exécuté dans le conteneur depuis l'hôte.

Lister tous les mappages de ports publiés pour un conteneur

Dans cette étape, nous allons apprendre à lister les mappages de ports publiés pour un conteneur Docker en cours d'exécution. Cela est utile pour confirmer quels ports sont exposés et comment ils sont mappés sur l'hôte.

Nous pouvons utiliser la commande docker port suivie de l'ID ou du nom du conteneur pour lister tous les mappages de ports publiés pour un conteneur spécifique. Commençons par obtenir l'ID du conteneur nginx que nous avons démarré à l'étape précédente.

docker ps -q --filter ancestor=nginx

Cette commande affichera l'ID du conteneur. Copiez cet ID car nous l'utiliserons dans la commande suivante.

Maintenant, utilisez la commande docker port avec l'ID du conteneur pour lister les mappages de ports. Remplacez <container_id> par l'ID réel que vous avez obtenu.

docker port <container_id>

Vous devriez voir une sortie similaire à 80/tcp -> 0.0.0.0:8080. Cela indique que le port interne 80 du conteneur (utilisant le protocole TCP) est mappé sur le port 8080 de toutes les interfaces de l'hôte (0.0.0.0).

Cette commande est un moyen rapide de visualiser tous les mappages de ports configurés pour un conteneur en cours d'exécution.

Lister un mappage de port TCP publié spécifique

Dans cette étape, nous allons affiner notre utilisation de la commande docker port pour lister un mappage de port publié spécifique, incluant le protocole. Ceci est particulièrement utile lorsqu'un conteneur expose plusieurs ports avec différents protocoles.

Pour lister un mappage de port TCP publié spécifique, nous ajoutons le port du conteneur et le protocole (/tcp) à la commande docker port. Tout d'abord, récupérez à nouveau l'ID du conteneur si vous ne l'avez pas sous la main.

docker ps -q --filter ancestor=nginx

Maintenant, utilisez la commande docker port avec l'ID du conteneur en spécifiant le port interne 80 avec le protocole TCP. Remplacez <container_id> par l'ID de votre conteneur.

docker port < container_id > 80/tcp

Le résultat devrait être 0.0.0.0:8080. Cela montre précisément l'adresse hôte et le port sur lequel le port TCP interne 80 du conteneur est mappé. Cette méthode est plus précise que de lister tous les ports si vous ne vous intéressez qu'à un mappage et protocole particuliers.

Lister un mappage de port UDP publié spécifique (erreur attendue)

Dans cette étape, nous allons tenter de lister un mappage de port UDP publié spécifique pour notre conteneur nginx. Comme Nginx utilise généralement uniquement le protocole TCP pour son serveur web, nous nous attendons à ce que cette commande ne trouve aucun mappage UDP et retourne potentiellement une erreur ou aucun résultat. Cela démontre comment spécifier le protocole lors de l'interrogation des mappages de ports et ce qui se passe lorsqu'un mappage pour ce protocole n'existe pas.

Tout d'abord, récupérez l'ID de votre conteneur nginx.

docker ps -q --filter ancestor=nginx

Maintenant, utilisez la commande docker port avec l'ID du conteneur en spécifiant le port interne 80 avec le protocole UDP (/udp). Remplacez <container_id> par l'ID de votre conteneur.

docker port < container_id > 80/udp

Vous devriez constater que cette commande ne produit aucun résultat ou affiche un message d'erreur. Cela s'explique par le fait que le conteneur nginx, dans sa configuration standard, n'expose pas le port 80 en utilisant le protocole UDP. Cela souligne l'importance de spécifier le bon protocole lors de la consultation des mappages de ports.

Lister un mappage de port publié spécifique sans préciser le protocole

Dans cette étape, nous allons apprendre comment lister un mappage de port publié spécifique sans indiquer explicitement le protocole (TCP ou UDP). Lorsque le protocole est omis, la commande docker port affichera les mappages pour les protocoles TCP et UDP du port du conteneur spécifié.

Commencez par récupérer l'ID de votre conteneur nginx.

docker ps -q --filter ancestor=nginx

Utilisez ensuite la commande docker port avec l'ID du conteneur en spécifiant le port interne 80 sans mentionner le protocole. Remplacez <container_id> par l'ID de votre conteneur.

docker port < container_id > 80

Comme notre conteneur nginx ne possède qu'un mappage TCP pour le port 80, le résultat sera 80/tcp -> 0.0.0.0:8080. Si le conteneur avait des mappages TCP et UDP pour le port 80, les deux seraient affichés. Cette méthode permet de visualiser facilement tous les mappages pour un port interne donné, quel que soit le protocole utilisé.

Résumé

Dans ce lab, nous avons appris à démarrer un conteneur Docker et à publier ses ports internes sur la machine hôte en utilisant la commande docker run -p. Nous avons illustré cela en exécutant un conteneur Nginx et en mappant son port interne 80 vers le port 8080 de l'hôte, puis en vérifiant son accessibilité avec curl.

Ensuite, nous avons exploré la commande docker port pour lister les mappages de ports publiés d'un conteneur en cours d'exécution. Nous avons appris à lister tous les ports publiés et à interroger des mappages spécifiques de ports TCP ou UDP, comprenant qu'une requête pour un mappage UDP inexistant générerait une erreur. Nous avons également pratiqué le listing d'un mappage de port spécifique sans préciser explicitement le protocole.