Lorsque vous gérez un conteneur PostgreSQL avec Docker Compose, la configuration des variables d'environnement a un impact significatif sur le fonctionnement initial et le mode de redémarrage du conteneur. En particulier, la présence d'un volume de données affecte le moment d'application de chaque variable, il est donc crucial de le comprendre pour garantir un fonctionnement sûr.


1. Variables d'environnement obligatoires : POSTGRES_PASSWORD



Lorsque vous exécutez un conteneur PostgreSQL à partir d'une image Docker, POSTGRES_PASSWORD est la seule variable d'environnement obligatoire qui doit absolument être configurée, indépendamment de l'état du volume de données.

Nom de la variable Rôle Moment d'application Comportement lors de la suppression
POSTGRES_PASSWORD Configuration du mot de passe superutilisateur Toujours nécessaire (configuration initiale et processus de démarrage du conteneur) Échec de demarrage du conteneur (erreur de sécurité)

Essentiel : Cette variable est une exigence de sécurité pour démarrer le conteneur, et elle doit également être spécifiée dans le fichier docker-compose.yml même si des données existent déjà.


2. Variables de configuration initiale : Comprendre le moment d'application

POSTGRES_USER et POSTGRES_DB sont les variables d'environnement qui ne s'appliquent que lorsque le cluster de base de données est créé pour la première fois (quand le volume de données est vide).

Nom de la variable Rôle Moment d'application Impact d'un changement lors du redémarrage
POSTGRES_USER Spécifier le nom du superutilisateur initial Uniquement lorsque le volume est vide Ignoré (conserve l'utilisateur existant)
POSTGRES_DB Créer le nom de la base de données initiale Uniquement lorsque le volume est vide Ignoré (conserve la base de données existante)

📌 Principe de fonctionnement lors du redémarrage

Lorsque vous redémarrez le conteneur avec docker-compose up -d en connectant un volume où des données existent déjà, l'image PostgreSQL passe le processus d'initialisation (initdb) et charge les données existantes.

Par conséquent, si vous modifiez d'autres configurations comme le nom du conteneur ou la méthode de journalisation et redémarrez, même si vous modifiez les valeurs de POSTGRES_USER ou POSTGRES_DB, les utilisateurs ou noms de bases de données existants ne seront pas modifiés.


3. Exemple de Docker Compose



Voici un exemple concis de docker-compose.yml incluant des variables obligatoires et recommandées.

services:
  db:
    image: postgres:latest
    restart: always
    container_name: my_postgres_db  # Nom du conteneur (modifiable)
    logging:
      driver: "json-file"          # Méthode de journalisation (modifiable)
    environment:
      # ⚠️ Variables obligatoires : doivent être incluses.
      POSTGRES_PASSWORD: your_secure_password 

      # Variables de configuration initiale : s'appliquent uniquement lorsque le volume est vide.
      POSTGRES_USER: devuser
      POSTGRES_DB: main_app_db
    ports:
      - "5432:5432"
    volumes:
      # Volume pour stocker les données de manière permanente
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

✨ Conseils d'exploitation : Modification sécurisée des paramètres

Après avoir modifié le nom du conteneur et les paramètres de journalisation, pour redémarrer tout en conservant les données existantes, utilisez la commande suivante.

docker-compose up -d

Avertissement : Faites attention à ne jamais utiliser la commande de suppression du volume contenant des données (docker-compose down -v).