mirror of
https://github.com/MaksTinyWorkshop/_Assistant_Lead_Tech
synced 2026-06-28 01:53:40 +02:00
ef24d85d57
Triage des 27 propositions du buffer de capitalisation (skill capitalisation-triage), avec vérification des doublons contre la base. Intégré dans knowledge/ (23 entrées): - backend: redis (compensation incrBy non-atomique), nestjs (injection cassée sous tsx watch; guard write mode dégradé), async (test rollback pipeline multi-fichiers), contracts (idempotence POST), auth (disclosure comptes soft-deleted), prisma (index partial soft-delete), llm-providers (nouveau: OAuth vs API key, prompt caching). - frontend: tests (garde-fous parking Later), navigation (fichiers non-route sous src/app Expo Router), general (type client vs payload backend), state (fallback catch-all mapping DB→UI). - workflow: story-tracking (statut BMAD vs narratif obsolète). - product: general (nouveau: doc feature store sans UI). - infra: NOUVEAU DOMAINE (traefik, tailscale, docker, docker-networking, reverse-proxy-paths, sidecar tailscale) + 00_INDEX.md. Autres: - 90_debug_et_postmortem.md: post-mortem réseau Docker partagé hors compose. - Rejeté 3 doublons (types enum contracts, getter PrismaService, $transaction). - Buffer 95_a_capitaliser.md purgé et restauré à son état initial. - _projects.conf: MAJ statuts epics + ajout app-rl799.
3.4 KiB
3.4 KiB
title: Infra — Risques & vigilance : Docker domain: infra bucket: risques tags: [docker, dns, hostname, compose, tailscale, networking] applies_to: [implementation, review, debug, architecture] severity: high validated_on: 2026-06-25 source_projects: [apps/stirling-pdf, infra/postgres]
Infra — Risques & vigilance : Docker
Extrait de la base de connaissance Lead_tech. Voir
knowledge/infra/risques/README.mdpour l'index complet.
Collision DNS Docker : hostname container vs service name
Risques
- Dans un
docker-compose.yml, déclarerhostname: <X>sur un service alors qu'un autre service du même compose s'appelle<X>crée deux entrées A pour le nom<X>dans le DNS embarqué Docker (127.0.0.11) :- le service name
<X>(résolu vers l'IP du container du service), - le
hostname: <X>du container voisin.
- le service name
- Un autre container du même network qui fait
getent hosts <X>peut tomber sur l'une ou l'autre selon l'ordre d'enregistrement — non déterministe entredocker compose upsuccessifs (dépend de l'ordre de démarrage).
Symptômes
- Un service en réseau interne retourne 200 sur son IP directe mais
connection refusedquand on le hit par son service name depuis un voisin. - Aucune erreur explicite dans les logs : juste un
connection refusedqui ressemble à "l'app n'écoute pas". - Cas typique sidecar Tailscale :
tailscale serveproxie versapp:8080mais le DNS résoutappvers le sidecar lui-même → 502 côté HTTPS.
Bonnes pratiques / mitigations
# ❌ collision DNS — "app" peut résoudre vers le sidecar
services:
app:
image: monapp # service name DNS = "app"
proxy:
image: nginx
hostname: app # ⚠ collision
# ✅ pas de hostname Docker : le service name reste la seule entrée DNS
services:
app:
image: monapp
proxy:
image: nginx
# hostname Docker non défini → ID container random
# les voisins s'adressent au proxy via le service name "proxy"
- Règle : ne jamais mettre
hostname: <X>quand un service du même compose s'appelle<X>. - Cas sidecar Tailscale : ne pas mettre
hostname: <app>pour matcherTS_HOSTNAME.TS_HOSTNAMEest lu par tailscaled et fixe le nom côté tailnet, totalement décorrélé du DNS Docker interne. Laisser le hostname Docker par défaut (voirknowledge/infra/patterns/tailscale.md).
Diagnostic
# Dans le container qui fait l'appel
docker exec <caller> getent hosts <name-resolved>
# Plus d'une ligne pour le même nom → collision DNS Docker
- Contexte technique : Docker DNS / Compose / sidecar Tailscale — apps/stirling-pdf 27-05-2026
Réseau Docker partagé entre stacks — voir post-mortem
Un réseau Docker mutualisé entre plusieurs stacks (ex. Postgres partagé) déclaré external: true peut malgré tout être supprimé par un docker compose down quand aucun autre projet ne le revendique, avec perte de connectivité en cascade et conteneur recréé sans son mapping de ports.
Détail complet, règles opérationnelles et signal de détection : voir la section « Réseau Docker partagé entre stacks — créer hors compose » dans 90_debug_et_postmortem.md.
- Contexte technique : Docker / réseau partagé / NUC — infra/postgres 22-04-2026