Les secrets Swarm

docker secret create stocke une valeur chiffrée dans le journal Raft des managers ; un service qui la liste la reçoit comme un fichier dans /run/secrets, en mémoire, et nulle part ailleurs. docker service inspect n'affiche jamais sa valeur.

Comment ça marche

Crée-le depuis l'entrée standard (printf '%s' "$VALEUR" | docker secret create nom -) ou un fichier, déclare-le dans la stack (external: true, ou file:), et liste-le sous secrets: dans le service. Les images officielles lisent les variables NOM_FILE (POSTGRES_PASSWORD_FILE) ; les applications peuvent suivre la même convention. Un secret ne change pas : crée un nouveau nom pour le renouveler.

Ce qui casse

Les variables d'environnement font partie de la définition du service : docker service inspect les affiche, chaque conteneur en hérite, les rapports de plantage les vident. Écrire ${PASSWORD} dans le fichier de stack ne fait que déplacer la valeur de git vers le déploiement. Un secret créé avec la mauvaise valeur échoue à la connexion, pas au déploiement.

Dans compose.yaml

services:
  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD_FILE: /run/secrets/db_password
    secrets:
      - db_password

secrets:
  db_password:
    external: true
    name: shop_db_password

Regarde-le casser, puis répare-le

Écris le Dockerfile ou le fichier compose, tape les commandes docker, et regarde un serveur simulé les exécuter à travers redémarrages, mises à jour et trafic. Gratuit pour commencer.