Linux

Docker Run — Containers sur le même réseau

Déployer des containers (PostgreSQL + pgAdmin4) sur un réseau Docker personnalisé avec la commande docker run.

← Retour aux tutoriels Linux
📚 C'est quoi Docker ? Docker est un outil qui permet de faire tourner des applications dans des containers — des sortes de "mini-machines virtuelles" ultra-légères. Au lieu d'installer PostgreSQL directement sur votre serveur (ce qui peut créer des conflits), vous le lancez dans un container isolé. Chaque container a son propre environnement, ses propres fichiers, et peut être démarré/arrêté/supprimé sans affecter le reste du système.
ⓘ Environnement de travail Ce tuto est réalisé dans un environnement de test sous WSL avec VS Code. Docker Desktop doit être installé sur Windows avec l'intégration WSL activée. Toutes les commandes se lancent depuis le terminal WSL dans VS Code (Ctrl + `).
⚠ Adaptez à votre réseau Depuis WSL, accédez aux services via http://localhost:PORT. Depuis un autre poste du réseau, utilisez l'IP de votre machine Windows (ipconfig dans PowerShell).

Préparer le dossier de travail

Schéma de l'architecture

🔌 Architecture Docker Run — Réseau personnalisé ┌──────── Réseau : mon_reseau ─────────┐ │ │ │ ┌────────────┐ ┌──────────────┐ │ │ │ pgadmin │───▶│ postgres_db │ │ │ │ :8080 │ │ :5432 │ │ │ │ (interface │ │ (base de │ │ │ │ web) │ │ données) │ │ │ └────────────┘ └──────────────┘ │ │ │ │ Les 2 containers se voient par │ │ leur nom (DNS Docker interne) │ └──────────────────────────────────────┘ pgAdmin → se connecte à "postgres_db"

On commence par créer un dossier dédié au projet. C'est une bonne habitude de toujours organiser ses projets Docker dans des dossiers séparés :

mkdir -p ~/docker-run-lab
cd ~/docker-run-lab

Créer un réseau Docker

Par défaut, chaque container Docker est isolé. Pour que deux containers puissent se parler (par exemple pgAdmin qui doit se connecter à PostgreSQL), il faut les mettre sur le même réseau :

docker network create mon_reseau

Vérifier la création

docker network ls

Vous devez voir mon_reseau dans la liste avec le driver bridge.

ⓘ Pourquoi un réseau personnalisé ? Sur le réseau bridge par défaut, les containers ne peuvent pas se joindre par leur nom. Avec un réseau personnalisé, Docker fournit la résolution DNS automatique entre les containers.

Déployer PostgreSQL

PostgreSQL est une base de données. On va le lancer dans un container Docker avec une seule commande. Chaque option est expliquée dans le tableau en dessous :

docker run -d --name postgres_db --network mon_reseau -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=Password -e POSTGRES_DB=mydb -v ./pg_data:/var/lib/postgresql/data postgres:16

Explication détaillée de chaque option

Option Description
-d Mode détaché (arrière-plan)
--name postgres_db Nom du container — servira aussi de nom DNS sur le réseau
--network mon_reseau Connecte au réseau personnalisé créé à l'étape 2
-e POSTGRES_USER=admin Nom de l'utilisateur de la base de données
-e POSTGRES_PASSWORD=Password Mot de passe de l'utilisateur
-e POSTGRES_DB=mydb Nom de la base de données créée au démarrage
-v ./pg_data:/var/lib/postgresql/data Volume : les données sont stockées dans ./pg_data dans le même dossier
postgres:16 Image PostgreSQL version 16 depuis Docker Hub
ⓘ Pas de -p sur PostgreSQL On n'expose pas le port 5432 sur l'hôte — seul pgAdmin (sur le même réseau Docker) a besoin d'y accéder. C'est plus sécurisé : la base de données n'est pas accessible depuis l'extérieur.

Déployer pgAdmin4

docker run -d --name pgadmin --network mon_reseau -e [email protected] -e PGADMIN_DEFAULT_PASSWORD=Password -p 8080:80 -v ./pgadmin_data:/var/lib/pgadmin dpage/pgadmin4

Explication des options

Option Description
--name pgadmin Nom du container
--network mon_reseau Même réseau que PostgreSQL — obligatoire pour communiquer
-e PGADMIN_DEFAULT_EMAIL Email de connexion à l'interface web pgAdmin
-e PGADMIN_DEFAULT_PASSWORD Mot de passe de connexion à pgAdmin
-p 8080:80 Port 8080 de votre PC → port 80 du container
-v ./pgadmin_data:/var/lib/pgadmin Volume pour persister la configuration pgAdmin dans le même dossier

pgAdmin4 sera accessible sur http://localhost:8080.

Connecter pgAdmin4 à PostgreSQL

  1. Ouvrez http://localhost:8080 dans un navigateur.
  2. Connectez-vous avec [email protected] / Password.
  3. Clic droit sur Servers → Register → Server.
  4. Onglet General : Name = MonPostgres
  5. Onglet Connection :
    Champ Valeur
    Host name/address postgres_db (nom du container !)
    Port 5432
    Username admin
    Password Password
  6. Cliquez Save.
✔ Clé du tuto pgAdmin peut joindre PostgreSQL via le nom postgres_db (et non une IP) grâce au réseau Docker personnalisé qui fournit la résolution DNS.

Vérifications et commandes utiles

Voir les containers en cours

docker ps

Inspecter le réseau

docker network inspect mon_reseau

Vous verrez les deux containers (postgres_db et pgadmin) avec leurs IP internes.

Voir les logs

docker logs postgres_db
docker logs pgadmin

Tester la connexion entre containers

docker exec pgadmin ping -c 2 postgres_db

Arrêter et supprimer

docker stop postgres_db pgadmin
docker rm postgres_db pgadmin
docker network rm mon_reseau

Structure du dossier

docker-run-lab/
├── pg_data/            # Données PostgreSQL
└── pgadmin_data/       # Configuration pgAdmin
✔ Résultat PostgreSQL et pgAdmin4 tournent sur le même réseau Docker. pgAdmin communique avec PostgreSQL via le nom du container (postgres_db), sans avoir besoin de connaître son IP. Les données sont persistées dans ./pg_data/ et ./pgadmin_data/.