Skip to main content

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