Documenter un incident où une erreur applicative apparente (504 Gateway Timeout) masquait en réalité un problème de topologie réseau Docker, afin de conserver une trace exploitable du diagnostic, de la décision et de la correction.
Le site blog.claralicious.dev est exposé via Traefik, avec une stack Docker composée notamment de Drupal, PostgreSQL et n8n.
Le service Drupal est connecté à plusieurs réseaux Docker : un réseau utilisé par Traefik pour l’exposition HTTP(S) et un réseau interne destiné aux échanges applicatifs.
L’incident survient alors que :
- les containers sont opérationnels,
- la charge machine est faible,
- Drupal répond correctement en accès direct.
Traefik est utilisé comme reverse-proxy unique pour l’exposition HTTPS.
Les services sont déclarés via labels Docker, sans indication explicite du réseau à utiliser pour joindre le backend Drupal.
Cette configuration repose donc sur un comportement implicite du provider Docker de Traefik pour la sélection de l’adresse IP du service cible.
- Les requêtes HTTPS retournent systématiquement un 504 Gateway Timeout après ~30 secondes.
- Le backend Drupal répond correctement lorsqu’il est appelé directement depuis l’environnement réseau adéquat.
- Les métriques système (CPU, mémoire, I/O) ne montrent aucune anomalie.
- TLS fonctionne correctement (handshake et certificat valides).
Le symptôme est trompeur : il imite une panne applicative ou une lenteur backend alors que l’application est saine.
- Tester explicitement l’accessibilité du backend depuis Traefik sur chaque interface réseau Docker.
- Identifier que Traefik tente de joindre le backend via une IP associée à un réseau interne auquel il n’est pas connecté.
- Rendre explicite le réseau Docker utilisé par Traefik pour ce service, afin d’éliminer toute ambiguïté.
L’ajout explicite du réseau Docker utilisé par Traefik (traefik.docker.network) permet :
- une résolution immédiate des requêtes HTTPS,
- la disparition complète des erreurs 504,
- un comportement stable et reproductible.
Aucune modification applicative n’a été nécessaire côté Drupal.
Add new comment