Error ECONNREFUSED Postgres en n8n Docker Compose

Como Ingeniero DevOps con especialización en n8n, me encuentro frecuentemente con el error "ECONNREFUSED" al intentar conectar n8n con una base de datos PostgreSQL, especialmente cuando se ejecuta dentro de Docker Compose. Este error, en esencia, significa que n8n no puede establecer una conexión con el servidor PostgreSQL en la dirección y puerto especificados. Es frustrante, pero con el conocimiento adecuado y un enfoque sistemático, es totalmente resoluble.

Resumen Rápido del Problema: El error ECONNREFUSED en n8n con PostgreSQL dentro de Docker Compose ocurre cuando el contenedor de n8n no puede alcanzar el contenedor de PostgreSQL. Las causas principales son problemas de red (dirección incorrecta, puerto bloqueado) o el servidor PostgreSQL no está escuchando o aún no está listo.

Causas Comunes del Error ECONNREFUSED

Entender las causas subyacentes es crucial para una resolución efectiva. Aquí hay algunas de las más comunes:

Problemas de Red y Configuración de Docker Compose

Los problemas de red dentro de Docker Compose son, con diferencia, la causa más común. La configuración incorrecta de las variables de entorno para la conexión a la base de datos o problemas de resolución de nombres de host son los culpables habituales.

Resolución de Problemas de Red

Sigue estos pasos para diagnosticar y solucionar problemas de red:

  • Verifica la Dirección del Host (POSTGRES_HOST): Asegúrate de que n8n esté apuntando al nombre del servicio correcto definido en tu archivo docker-compose.yml. No uses localhost o 127.0.0.1, sino el nombre del servicio PostgreSQL.
  • Comprueba el Puerto (POSTGRES_PORT): El puerto por defecto para PostgreSQL es 5432. Confirma que n8n está intentando conectarse al puerto correcto.
  • Asegúrate de que PostgreSQL está Escuchando en el Puerto Correcto: Dentro del contenedor PostgreSQL, PostgreSQL debe estar configurado para escuchar en el puerto 5432 (o el que hayas definido). Esto se verifica en la configuración de PostgreSQL dentro del contenedor.
  • Resolución de Nombres de Host: Verifica que el contenedor n8n pueda resolver el nombre del servicio PostgreSQL. Docker Compose se encarga de esto automáticamente, pero en entornos más complejos, puede haber problemas. Usa el comando docker exec -it n8n bash (asumiendo que n8n es el nombre del servicio) para abrir una terminal dentro del contenedor n8n y luego ejecuta ping postgres (o el nombre de tu servicio PostgreSQL). Si no resuelve, hay un problema de red.
# Ejemplo de docker-compose.yml (fragmento) version: "3.8" services: n8n: image: n8nio/n8n:latest environment: - N8N_HOST=localhost - N8N_PORT=5678 - N8N_BASIC_AUTH_USER=admin - N8N_BASIC_AUTH_PASSWORD=password - POSTGRES_USER=default - POSTGRES_PASSWORD=password - POSTGRES_DB=n8n - POSTGRES_HOST=postgres # <--- IMPORTANTE: Nombre del servicio PostgreSQL - POSTGRES_PORT=5432 ports: - "5678:5678" depends_on: - postgres postgres: image: postgres:15-alpine environment: - POSTGRES_USER=default - POSTGRES_PASSWORD=password - POSTGRES_DB=n8n volumes: - n8n_data:/var/lib/postgresql/data volumes: n8n_data:

Problemas con PostgreSQL: Disponibilidad y Configuración

Incluso si la red está configurada correctamente, PostgreSQL podría no estar listo para aceptar conexiones o podría estar configurado incorrectamente. Es fundamental revisar el estado del servidor PostgreSQL.

Resolviendo Problemas de Disponibilidad y Configuración de PostgreSQL

  • Tiempo de Inicialización: Da tiempo suficiente a PostgreSQL para inicializarse completamente antes de que n8n intente conectarse. Usa la directiva depends_on en docker-compose.yml para asegurar el orden de inicio.
  • Estado del Contenedor PostgreSQL: Verifica que el contenedor PostgreSQL esté funcionando correctamente usando docker ps. Busca errores en los logs del contenedor PostgreSQL usando docker logs postgres.
  • Configuración de Autenticación: Confirma que las credenciales de conexión (usuario, contraseña, base de datos) en n8n coinciden con las que has definido en la configuración de PostgreSQL.
  • Configuración de Conexiones: Verifica que PostgreSQL esté configurado para aceptar conexiones remotas. Esto suele implicar editar el archivo pg_hba.conf (dentro del contenedor PostgreSQL) para permitir conexiones desde el rango de IPs de Docker. En entornos Docker, esto normalmente no es un problema, pero vale la pena revisarlo.
# Ejemplo de verificación de logs (docker-compose) docker logs postgres

Tabla Comparativa: Causas Comunes y Soluciones

Problema Causa Probable Solución
ECONNREFUSED Dirección del host incorrecta (localhost en lugar del nombre del servicio). Asegúrate de usar el nombre del servicio PostgreSQL definido en docker-compose.yml (e.g., postgres).
ECONNREFUSED Puerto incorrecto o bloqueado. Verifica que POSTGRES_PORT sea correcto (por defecto, 5432). Asegúrate de que no haya firewalls bloqueando el puerto.
ECONNREFUSED PostgreSQL no está completamente inicializado. Usa depends_on en docker-compose.yml para asegurar que PostgreSQL se inicia antes que n8n.
ECONNREFUSED Credenciales de conexión incorrectas. Verifica que POSTGRES_USER, POSTGRES_PASSWORD, y POSTGRES_DB coincidan entre n8n y la configuración de PostgreSQL.

Creando Flujos Perfectos con la IA de Scriflow

Una vez resuelto el problema de conexión, la optimización de tus flujos de trabajo se convierte en la prioridad. ¿Estás listo para llevar tus flujos de n8n al siguiente nivel? Con la IA de Scriflow, puedes generar flujos perfectos, sin errores y optimizados para el máximo rendimiento. Explora Scriflow hoy mismo y transforma la forma en que automatizas tus tareas.

¿Atascado con nodos? Genera flujos con IA en 10 segundos.
Probar Scriflow Gratis ⚡