pérdida de conexión a PostgreSQL tras reinicio
RPD-42 — Ficha de Caso #001
Incidencia: pérdida de conexión a PostgreSQL tras reinicio
1. Contexto
Infraestructura:
- Nginx (terminación TLS)
- Traefik (routing interno Docker)
- Contenedores (n8n, Odoo, otros)
- PostgreSQL en host
Arquitectura:
Internet → Nginx → Traefik → Docker → PostgreSQL (host)
Evento reciente:
- Actualización del sistema (kernel + Docker)
- Reinicio del servidor
2. Síntoma
- Algunos contenedores no funcionan (n8n, Odoo)
- Otros contenedores funcionan correctamente
Error observado:
ECONNREFUSED 172.19.0.1:5432
3. Fase 0 — Análisis diferencial (heurística clave)
Observación:
- Servicios que fallan → usan PostgreSQL
- Servicios que funcionan → usan MariaDB
Conclusión:
- El problema NO es global
- El problema está ligado a PostgreSQL
Regla derivada:
Si el fallo es parcial, identificar la diferencia entre lo que falla y lo que funciona.
4. Clasificación del error
ECONNREFUSED
Interpretación:
- Red operativa
- Servicio no accesible
- Posible causa: servicio no escuchando
5. Hipótesis 1
PostgreSQL no está escuchando correctamente en la interfaz esperada.
6. Verificación
Comando:
ss -ltnp | grep 5432
Resultado:
127.0.0.1:5432
Conclusión:
- PostgreSQL solo escucha en localhost
- No accesible desde redes Docker
7. Hipótesis 2
Problema de bind de interfaces en PostgreSQL.
8. Contexto relevante
- Reinicio reciente
- Interfaces Docker (172.x) dependen del arranque de Docker
9. Hipótesis 3 (causa estructural)
PostgreSQL arranca antes de que existan las interfaces Docker.
Consecuencia:
- No puede bindear IPs 172.x
- No reintenta posteriormente
- Se queda en 127.0.0.1
10. Verificación
Acción:
systemctl restart postgresql
Resultado:
-
PostgreSQL empieza a escuchar en:
- 127.0.0.1
- 172.17.0.1
- 172.19.0.1
Conclusión:
Hipótesis confirmada.
11. Causa raíz
Orden de arranque incorrecto entre:
- Docker
- PostgreSQL
Dependencia implícita no declarada.
12. Solución
Override de systemd:
systemctl edit postgresql@17-main
Contenido:
[Unit]
After=docker.service
Resultado:
- PostgreSQL arranca después de Docker
- Interfaces disponibles
- Bind correcto
13. Estado final
- Servicios restaurados
- PostgreSQL escuchando en todas las interfaces necesarias
- Sistema estable tras reboot
14. Reglas RPD derivadas
Regla 1 — Análisis diferencial
Si el fallo es parcial:
→ comparar lo que funciona vs lo que falla → identificar componente común
Regla 2 — Interpretación de ECONNREFUSED
ECONNREFUSED → servicio no escuchando
No es:
- red
- firewall
- autenticación
Regla 3 — Priorizar eventos recientes
Ante un fallo:
→ revisar cambios recientes (reboot, update, deploy)
Regla 4 — Dependencias implícitas
Servicios pueden depender de:
- interfaces de red
- orden de arranque
- recursos externos
Estas dependencias deben ser explícitas.
15. Valor del caso
Este caso demuestra:
- Importancia del análisis diferencial
- Valor de la clasificación temprana del error
- Relevancia del contexto temporal
- Necesidad de modelar dependencias entre servicios
16. Etiquetas
- RPD-42
- diagnóstico
- PostgreSQL
- Docker
- systemd
- networking
- arranque
- heurísticas