--- title: Mapping de ports description: Publier un port du conteneur vers l'hôte sans exposer toute la stack. --- ## Réseau interne et monde extérieur Le réseau bridge est privé. Les services communiquent entre eux, mais le navigateur ou le terminal de l'hôte ne peut pas les joindre tant qu'aucun port n'est publié. ```yaml services: nginx: ports: - "8080:80" - "8443:443" ``` La syntaxe est : ```text PORT_HÔTE:PORT_CONTENEUR ``` `8443:443` redirige le port 8443 de la machine vers le port 443 écouté par Nginx dans le conteneur. ## Exposer uniquement le point d'entrée Dans une stack classique, PostgreSQL, le backend et le frontend n'ont pas forcément de section `ports:`. Ils restent accessibles depuis le réseau Docker, mais pas depuis l'extérieur. Seul Nginx publie un port. Il devient le point d'entrée et route ensuite les requêtes vers les services internes. ```text navigateur │ ▼ port publié de Nginx │ ├──► frontend └──► backend ──► postgres ``` ## Éviter les collisions Le port interne d'un service reste le même, tandis que le port hôte peut changer : ```yaml # Stack A ports: - "8443:443" # Stack B ports: - "8444:443" ``` Ce principe permet à plusieurs workers de test de lancer la même stack sur des plages de ports différentes. ## Restreindre une publication à la machine ```yaml services: postgres: ports: - "127.0.0.1:15432:5432" ``` Le préfixe `127.0.0.1` rend le port accessible depuis le serveur pour la maintenance, sans l'ouvrir sur l'adresse publique. Ne publie pas une base de données sur toutes les interfaces sans nécessité. Sans le préfixe 127.0.0.1, un mapping comme 5432:5432 peut exposer PostgreSQL sur Internet si le pare-feu le permet.