Proxys et adresses des conteneurs

Le DNS de Docker (127.0.0.11) renvoie l'adresse actuelle des conteneurs d'un service. Un proxy qui a résolu le nom une seule fois garde l'ancienne adresse après la recréation du conteneur.

Comment ça marche

Un conteneur recréé reçoit une nouvelle adresse IP sur ses réseaux. nginx résout un nom écrit dans proxy_pass à son démarrage, et plus jamais ensuite ; avec une directive resolver 127.0.0.11 et l'adresse dans une variable, il redemande quand la réponse expire (valid=, ou le TTL de 600 secondes du DNS de Docker). Avec Compose, depends_on avec restart: true redémarre le proxy après la recréation du service dont il dépend.

Ce qui casse

Après un déploiement, le proxy répond 502 Bad Gateway, alors que le nouveau conteneur fonctionne, jusqu'à ce que quelqu'un redémarre le proxy. Avec une variable mais sans resolver, nginx ne peut rien résoudre ; avec une variable, proxy_pass envoie l'URI telle qu'écrite, donc un / final change le chemin que reçoit le service.

Dans compose.yaml

services:
  frontend:
    build: ./frontend
    depends_on:
      api:
        condition: service_started
        restart: true

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.