Exemple mise en place d'un nouveau service
Nous allons mettre en place le servie Postgres pour la première fois. Voici les démarches à suivre pour que le nouveau service fonctionne avec notre environnement :
Etape 1 : Création de la structure des volumes
sudo mkdir -p /mnt/volumes/postgres/{data,logs,conf,init}
sudo chown -R dockersvc:dockersvc /mnt/volumes/postgres
sudo setfacl -R -m u:dockersvc:rwx,g:dockersvc:rwx /mnt/volumes/postgres
sudo setfacl -R -d -m u:dockersvc:rwx,g:dockersvc:rwx /mnt/volumes/postgres
Cette arborescence permet :
-
data/ → stockage des bases
-
logs/ → logs PostgreSQL hors conteneur
-
conf/ → fichiers de configuration personnalisés (
postgresql.conf,pg_hba.conf) -
init/ → scripts SQL ou shell exécutés au premier lancement
Etape 2 : Création du docker-compose.yml PostgreSQL
version: "3.9"
services:
postgres:
image: postgres:${POSTGRES_VERSION}-alpine
container_name: postgres
restart: unless-stopped
user: "${PUID}:${PGID}" # ✅ On force l'utilisation de dockersvc
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- TZ=${TZ}
volumes:
- ${VOLROOT}/postgres/data:/var/lib/postgresql/data
- ${VOLROOT}/postgres/logs:/var/log/postgresql
- ${VOLROOT}/postgres/conf:/etc/postgresql/custom
- ${VOLROOT}/postgres/init:/docker-entrypoint-initdb.d
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
interval: 10s
timeout: 5s
retries: 5
Etape 3 : Démarrer et Vérifier les UID/GID
Pour vérifier les UID/GID après le premier démarrage :
docker exec -it postgres id
Résultat attendu :
uid=10050(dockersvc) gid=10050(dockersvc) groups=10050(dockersvc)
Si l’image officielle PostgreSQL refuse user: "${PUID}:${PGID}", alors on garde dockersvc propriétaire des volumes mais on lance le conteneur sous avec l'utilisateur par défaut mais on va ajouter des ACL spécifique.
Pour ajouter une ACL spécifique :
sudo setfacl -R -m u:999:rwx /mnt/volumes/postgres