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 archivodocker-compose.yml. No useslocalhosto127.0.0.1, sino el nombre del servicio PostgreSQL. -
Comprueba el Puerto (
POSTGRES_PORT): El puerto por defecto para PostgreSQL es5432. 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 ejecutaping postgres(o el nombre de tu servicio PostgreSQL). Si no resuelve, hay un problema de red.
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_onendocker-compose.ymlpara 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 usandodocker 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.
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.