|

Instalar n8n con Docker: guía paso a paso

Actualizado el 11/10/2026 — Este artículo fue actualizado con información reciente y secciones nuevas.

Si querés instalar n8n con Docker, hay dos caminos: un solo comando para probar la herramienta en minutos, o un despliegue con Docker Compose, PostgreSQL y HTTPS para dejarla corriendo en un servidor. En esta guía están los dos, con los errores que más se repiten y cómo resolverlos. Para ubicarte en el tema, antes podés leer nuestra guía de n8n.

n8n es una plataforma de automatización de workflows de código abierto que conecta aplicaciones, APIs y servicios mediante nodos en una interfaz visual. Docker es la forma oficial de autoalojarla (self-hosted): empaqueta n8n en un contenedor aislado, con su configuración y sus datos. Sirve para desarrolladores, equipos técnicos y pymes que quieren controlar dónde corren sus automatizaciones.

En pocas palabras: para probar n8n ejecutás docker run -it --rm -p 5678:5678 n8nio/n8n y abrís localhost:5678. Para producción usás Docker Compose con la imagen oficial, un volumen persistente, PostgreSQL, la variable N8N_ENCRYPTION_KEY fija y un reverse proxy con SSL.

En 30 segundos

  • Prueba rápida: un docker run alcanza para conocer la interfaz, pero sin volumen perdés todo al cerrar el contenedor.
  • Producción: Docker Compose con volúmenes nombrados, PostgreSQL y restart: unless-stopped.
  • Clave de cifrado: fijá N8N_ENCRYPTION_KEY desde el primer día y guardala fuera del servidor. Si se pierde, las credenciales no se recuperan.
  • Webhooks: necesitan WEBHOOK_URL con tu dominio real, no localhost.
  • Autenticación: la variable N8N_BASIC_AUTH_ACTIVE ya no existe en las versiones actuales. n8n usa una cuenta de propietario.

¿Qué necesitás antes de instalar n8n en Docker?

Necesitás una versión vigente de Docker Engine, Docker Compose v2 (el comando docker compose, con espacio) y un puerto 5678 libre. Para producción, sumá un dominio apuntando a tu servidor y acceso para abrir los puertos 80 y 443. En Windows y Mac, Docker Desktop trae Docker y Compose juntos.

  • Docker Engine actualizado: en Linux lo instalás con el script o los repositorios oficiales de Docker. Evitá los paquetes viejos de las distribuciones.
  • Compose v2: si docker compose da error pero docker-compose funciona, tenés la versión v1, que ya no recibe mantenimiento. Actualizá.
  • WSL2 en Windows: activalo antes de instalar Docker Desktop. Con WSL2 el rendimiento de los volúmenes es bastante mejor.
  • Un dominio: imprescindible para webhooks reales y certificados SSL. Si todavía no tenés uno, podés registrarlo con Donweb.
  • Recursos mínimos: para pocos workflows alcanza un VPS chico. Con PostgreSQL y varios workflows en paralelo conviene tener más memoria disponible. Medí con tu carga real en lugar de adivinar.

Verificá que todo esté en orden:

docker --version
docker compose version

¿Cómo instalar n8n con Docker en 5 minutos?

Ejecutá docker run -it --rm -p 5678:5678 n8nio/n8n, esperá a que descargue la imagen y abrí http://localhost:5678. Ahí creás la cuenta de propietario y ya podés armar workflows. Es solo para pruebas: con --rm, el contenedor y sus datos se borran al detenerlo.

Para conservar los datos sin pasar todavía a Compose, creá un volumen y montalo en el directorio de datos de n8n:

docker volume create n8n_data

docker run -d \
  --name n8n \
  --restart unless-stopped \
  -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  n8nio/n8n

La imagen también se publica en el registro de n8n como docker.n8n.io/n8nio/n8n, que es el nombre que usa la documentación oficial. Las dos referencias apuntan a la imagen oficial. Si querés ver los logs mientras arranca, usá docker logs -f n8n.

¿Qué pasa si accedo a n8n por http desde otra máquina?

Si entrás por http desde una IP distinta de localhost, n8n puede mostrar un aviso de cookie segura y no dejarte iniciar sesión. Eso pasa porque la cookie de sesión está pensada para HTTPS. La solución correcta es poner SSL. Para una prueba aislada en una red interna, podés definir N8N_SECURE_COOKIE=false, sabiendo que bajás una capa de protección.

¿Cómo armar n8n con Docker Compose y PostgreSQL para producción?

Creá una carpeta con dos archivos: un .env con las variables sensibles y un docker-compose.yml con los servicios de n8n y PostgreSQL. Levantás todo con docker compose up -d. Los datos quedan en volúmenes nombrados que sobreviven a reinicios y actualizaciones.

mkdir -p ~/n8n && cd ~/n8n

El archivo .env. Generá la clave con openssl rand -base64 32 y la contraseña de la base con otro valor distinto:

N8N_VERSION=latest
N8N_ENCRYPTION_KEY=pegá-acá-la-salida-de-openssl
N8N_HOST=n8n.tudominio.com
N8N_PROTOCOL=https
WEBHOOK_URL=https://n8n.tudominio.com/
GENERIC_TIMEZONE=America/Argentina/Buenos_Aires
TZ=America/Argentina/Buenos_Aires
POSTGRES_USER=n8n
POSTGRES_PASSWORD=una-contraseña-larga-y-distinta
POSTGRES_DB=n8n

Cuando pruebes una versión puntual y te funcione, reemplazá latest por ese número exacto. Así controlás cuándo actualizás.

services:
  postgres:
    image: postgres:16
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 5

  n8n:
    image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
      DB_POSTGRESDB_USER: ${POSTGRES_USER}
      DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
      N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
      N8N_HOST: ${N8N_HOST}
      N8N_PROTOCOL: ${N8N_PROTOCOL}
      N8N_PROXY_HOPS: 1
      WEBHOOK_URL: ${WEBHOOK_URL}
      GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
      TZ: ${TZ}
    depends_on:
      postgres:
        condition: service_healthy
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:
  postgres_data:
  • Sin la clave version: en Compose v2 es obsoleta y genera una advertencia. Podés omitirla.
  • Puerto atado a 127.0.0.1: n8n solo escucha en el propio servidor y el reverse proxy es la única puerta de entrada.
  • Healthcheck en PostgreSQL: n8n espera a que la base esté lista antes de arrancar y evita errores de conexión en el primer inicio.
  • Política de reinicio: restart: unless-stopped hace que ambos servicios vuelvan solos después de reiniciar el servidor.

Levantá el stack y revisá que no haya errores:

docker compose up -d
docker compose ps
docker compose logs -f n8n

¿Qué variables de entorno necesita n8n en Docker?

Las imprescindibles en producción son N8N_ENCRYPTION_KEY, WEBHOOK_URL, las variables de conexión a la base de datos y la zona horaria. El resto se ajusta según tu caso. La lista completa está en la documentación oficial de variables de entorno de n8n.

VariableQué haceValor recomendado
N8N_ENCRYPTION_KEYCifra las credenciales guardadas (tokens OAuth, API keys). Si no la definís, n8n genera una y la guarda en el volumen.String aleatorio largo. Generalo con openssl rand -base64 32
N8N_HOSTHostname usado para la interfaz y las URLs internasTu dominio sin protocolo: n8n.tudominio.com
WEBHOOK_URLURL pública base para registrar webhooks en servicios externoshttps://n8n.tudominio.com/
N8N_PROTOCOLProtocolo de la URL de la interfazhttps en producción
N8N_PROXY_HOPSCantidad de proxies delante de n8n, para leer la IP real del cliente1 con un único Nginx o Traefik
DB_TYPETipo de base de datospostgresdb; si lo omitís usa SQLite
DB_POSTGRESDB_HOSTHost del servidor PostgreSQLNombre del servicio en Compose (por ejemplo postgres)
GENERIC_TIMEZONE y TZZona horaria para los nodos de cron y los logsAmerica/Argentina/Buenos_Aires
N8N_SECURE_COOKIEExige HTTPS para la cookie de sesiónDejala en su valor por defecto en producción

¿Sigue funcionando N8N_BASIC_AUTH_ACTIVE?

No. La autenticación básica por variables de entorno se eliminó a partir de n8n 1.0, y las guías viejas que todavía la mencionan están desactualizadas. Hoy el acceso se controla con la gestión de usuarios integrada: al abrir la instancia por primera vez, creás la cuenta de propietario. Si querés una capa extra antes de tener SSL, restringí el acceso por firewall o VPN.

¿Cómo guardo contraseñas sin dejarlas en texto plano?

n8n permite agregar el sufijo _FILE a muchas variables, por ejemplo DB_POSTGRESDB_PASSWORD_FILE. En lugar del valor, indicás la ruta de un archivo montado como secret de Docker. Así la contraseña no queda en el docker-compose.yml ni en la salida de docker inspect. Verificá en la documentación qué variables lo soportan en tu versión.

¿Conviene usar SQLite o PostgreSQL con n8n en Docker?

SQLite es la base por defecto y alcanza para pruebas o instancias chicas. PostgreSQL es la opción para producción: maneja mejor las escrituras concurrentes y es obligatoria si querés usar queue mode con workers. Si ya sabés que tu instancia va a crecer, empezá directamente con PostgreSQL y te ahorrás una migración.

  • SQLite: cero configuración, un solo archivo dentro del volumen. Con muchas ejecuciones simultáneas pueden aparecer errores de tipo “database is locked”.
  • PostgreSQL: requiere un servicio más, pero permite backups con pg_dump, monitoreo y escalado.
  • Migrar después: es posible exportando workflows y credenciales con la CLI de n8n e importándolos en la instancia nueva. Es más cómodo hacerlo con la instancia todavía chica.

Para una mirada de costos según el tamaño de tu operación, mirá cómo analizar costos según tu escala.

¿Cómo persistir los datos de n8n y hacer backup?

El directorio que tenés que persistir es /home/node/.n8n. Ahí viven la configuración, los archivos de la instancia y, con SQLite, la base de datos. Si usás PostgreSQL, también necesitás un volumen para la base. Sin esos volúmenes, perdés los workflows al recrear el contenedor.

  • Volumen nombrado: Docker decide dónde guarda los datos en el host. Es lo más simple y evita problemas de permisos.
  • Bind mount: vos elegís la carpeta (./n8n_data:/home/node/.n8n). Es más fácil de copiar, pero el usuario node del contenedor (UID 1000) tiene que poder escribir ahí.

Un backup razonable combina tres piezas: la base de datos, el volumen de n8n y la clave de cifrado. Sin la clave, el resto no te sirve para recuperar credenciales.

# Dump de PostgreSQL
docker compose exec -T postgres sh -c 'pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB"' > n8n_db.sql

docker run --rm -v n8n_data:/data -v "$(pwd)":/backup ubuntu tar czf /backup/n8n_data.tar.gz /data

docker compose exec n8n n8n export:workflow --all --output=/home/node/.n8n/workflows.json
docker compose exec n8n n8n export:credentials --all --output=/home/node/.n8n/credentials.json

Automatizá esto con un cron y copiá los archivos fuera del servidor. Un backup que vive en la misma máquina que la instancia no te protege de una falla del disco. Probá restaurar al menos una vez en un entorno aparte, porque un backup sin prueba de restauración es una suposición.

Para migrar a otro servidor, llevá el volumen o el dump, el .env con la misma N8N_ENCRYPTION_KEY y levantá el Compose. Con la clave original, las credenciales se leen sin problema.

¿Qué pasa si pierdo la N8N_ENCRYPTION_KEY?

Si perdés o cambiás la N8N_ENCRYPTION_KEY, las credenciales guardadas quedan ilegibles y no hay forma de recuperarlas. Tenés que reconfigurar cada integración a mano. Los workflows en sí no se pierden, pero dejan de funcionar hasta que vuelvas a cargar las credenciales.

  • Guardala fuera del servidor: en un gestor de contraseñas o un vault de secretos, no solo en el .env.
  • Definila desde el inicio: si arrancás sin ella, n8n genera una y la guarda en el volumen. Si después la definís con otro valor, vas a ver un error de claves que no coinciden.
  • Usá la misma en todas las instancias: en queue mode, el proceso principal y los workers tienen que compartirla.

¿Cómo configurar HTTPS en n8n con Docker?

Poné un reverse proxy delante de n8n que termine el SSL, con certificados de Let’s Encrypt. Las opciones más usadas son Traefik y Nginx con Certbot. En ambos casos, definí N8N_PROTOCOL=https, WEBHOOK_URL con tu dominio y N8N_PROXY_HOPS=1 para que n8n genere URLs correctas.

¿Cómo uso Traefik con Let’s Encrypt?

Traefik se configura con labels en el Compose y renueva los certificados solo. Es cómodo si vas a alojar varios servicios en el mismo servidor. La documentación oficial de n8n sobre SSL explica las opciones disponibles.

¿Cómo configuro Nginx para n8n?

Con Nginx necesitás reenviar el tráfico al puerto 5678 y habilitar los headers de WebSocket. Sin ellos, la interfaz no recibe actualizaciones en vivo de las ejecuciones. Un bloque mínimo para tu servidor:

server {
    server_name n8n.tudominio.com;

    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Después emitís el certificado con sudo certbot --nginx -d n8n.tudominio.com. Certbot agrega el bloque HTTPS y programa la renovación.

¿Cómo actualizar n8n en Docker sin perder datos?

Hacé un backup, cambiá la versión en el .env, bajá la imagen nueva con docker compose pull y recreá el contenedor con docker compose up -d. Los datos persisten en los volúmenes. Antes de actualizar, leé las release notes de n8n por si hay cambios que rompan compatibilidad.

  • Backup primero: base de datos y volumen, como se explicó antes. Las migraciones de base de datos son automáticas al arrancar y no siempre se pueden revertir.
  • Fijá la versión: en producción evitá latest. Probá la versión nueva en una instancia de prueba y recién después pasala a producción.
  • Verificá qué corre: con docker compose exec n8n n8n --version confirmás la versión real, sin depender de lo que muestre la interfaz.
  • Revisá los logs: después de actualizar, mirá docker compose logs -f n8n para detectar errores de migración o nodos con cambios.
# Después de editar N8N_VERSION en el .env
docker compose pull
docker compose up -d
docker compose exec n8n n8n --version

Si la interfaz sigue mostrando una versión vieja después de actualizar, probá un refresco forzado del navegador y confirmá la versión por consola. Reiniciar el contenedor con docker compose restart n8n descarta cualquier estado intermedio.

¿Cuándo usar queue mode con workers en n8n?

Usá queue mode cuando una sola instancia ya no alcanza para tus ejecuciones. En este modo, el proceso principal recibe los triggers y los workers ejecutan los workflows a través de una cola en Redis. Requiere PostgreSQL, Redis y la misma N8N_ENCRYPTION_KEY en todos los procesos.

  • Modo de ejecución: definí EXECUTIONS_MODE=queue en el proceso principal y en los workers.
  • Conexión a Redis: configurá QUEUE_BULL_REDIS_HOST y las variables asociadas.
  • Workers: el mismo servicio de n8n con el comando worker. Podés escalar su cantidad con docker compose up -d --scale.

No es necesario al empezar. Si recién arrancás, una instancia con PostgreSQL rinde bien. Los detalles y variables vigentes están en la documentación oficial de queue mode.

¿Cómo asegurar una instancia de n8n en Docker?

Las medidas básicas son no exponer el puerto 5678 a internet, servir todo por HTTPS, fijar la clave de cifrado, mantener la imagen actualizada y respaldar los datos. La mayoría de los incidentes en instancias autoalojadas vienen de un puerto abierto o de una versión sin actualizar.

  • Puerto cerrado: publicá 127.0.0.1:5678:5678 y dejá solo el 80 y el 443 abiertos en el firewall.
  • Secrets fuera del compose: usá archivos .env con permisos restringidos o secrets de Docker con el sufijo _FILE.
  • Actualizaciones: seguí las release notes de n8n y planificá una ventana de actualización periódica.
  • Credenciales con el mínimo permiso: creá API keys con alcance limitado para cada integración, así un token filtrado hace menos daño.
  • Gestor de secretos externo: si tu equipo ya usa uno, evaluá integrarlo para las credenciales de terceros.

Si buscás infraestructura en Argentina para alojar tu instancia, mirá el hosting cloud con Docker de Donweb.

¿Cómo solucionar los errores más comunes de n8n en Docker?

Los problemas más frecuentes son permisos en el volumen (EACCES), webhooks con URL de localhost, puertos ocupados, cookie segura y claves de cifrado que no coinciden. Todos se resuelven con un cambio de configuración. Empezá siempre por los logs: docker compose logs -f n8n.

¿Qué significa el error EACCES permission denied?

Significa que el usuario node del contenedor (UID 1000) no puede escribir en el directorio montado. Ocurre con bind mounts creados por root. Arreglalo con sudo chown -R 1000:1000 ./n8n_data. Con volúmenes nombrados no suele aparecer.

¿Por qué mis webhooks muestran localhost?

Porque falta WEBHOOK_URL. Con esa variable apuntando a tu dominio público, n8n genera URLs accesibles desde afuera. Después de cambiarla, recreá el contenedor y reactivá los workflows con webhooks para que se registren con la URL nueva.

¿Cómo resuelvo “port is already allocated”?

Otro proceso usa el puerto 5678. Identificalo con sudo ss -tlnp | grep 5678 en Linux o netstat -ano | findstr 5678 en Windows. Si no podés liberarlo, cambiá el mapeo a "5679:5678" y ajustá el proxy.

¿Qué hago si aparece “Mismatching encryption keys”?

Ese error indica que la clave del archivo de configuración del volumen no coincide con N8N_ENCRYPTION_KEY. Restaurá la clave original en el .env. No borres el volumen como atajo: perderías los datos. Más casos de este tipo están en errores comunes en producción.

¿Qué comandos sirven para diagnosticar n8n en Docker?

# Logs en tiempo real
docker compose logs -f n8n

docker compose ps

docker compose exec n8n sh

docker compose restart n8n

docker stats

¿Qué errores conviene evitar al instalar n8n con Docker?

  • Usar latest en producción sin control. Una actualización automática puede traer migraciones o cambios que rompan un workflow. Fijá la versión y actualizá cuando vos decidas.
  • No hacer backup antes de actualizar. Las migraciones suelen ser limpias, pero si fallan, necesitás un punto de retorno. Más ideas en workflows avanzados de enriquecimiento.
  • Omitir restart: unless-stopped. Sin esa línea, un reinicio del servidor deja n8n caído y los workflows sin ejecutarse.
  • Exponer el puerto 5678 a internet. Cualquiera podría llegar a tu login. Usá el proxy y cerrá el puerto.
  • Guardar la clave de cifrado solo en el servidor. Si el disco falla, perdés las credenciales. Guardala aparte.
  • Seguir guías viejas. Muchos tutoriales usan docker-compose v1, la clave version o la autenticación básica, que ya no aplican.

Ejemplo práctico (caso ilustrativo)

Imaginá a una desarrolladora freelance que administra formularios de contacto de varios clientes. Instala n8n en un VPS con el Compose de esta guía, publica n8n.sudominio.com con Nginx y configura WEBHOOK_URL.

Antes de sincronizar Google Sheets con n8n necesitás tener el entorno listo, así que repasá cómo instalar n8n con Docker.

Arma un workflow por cliente: el webhook recibe el formulario, un nodo IF filtra por tipo de consulta, otro crea el contacto en el CRM por API y un tercero agrega una fila a una hoja de cálculo. Con backups nocturnos de PostgreSQL y la versión de n8n fijada en el .env, actualiza cuando quiere, no cuando la imagen cambia sola.

Preguntas Frecuentes

¿Cuál es el comando para instalar n8n con Docker?

El comando base es docker run -it --rm -p 5678:5678 n8nio/n8n. Descarga la imagen oficial y levanta n8n en localhost:5678. Para no perder datos, agregá un volumen: -v n8n_data:/home/node/.n8n.

¿Qué diferencia hay entre docker run y Docker Compose para n8n?

docker run levanta un contenedor con opciones escritas en la línea de comandos, ideal para probar. Docker Compose define todo en un archivo YAML versionable. Para producción, Compose es el estándar porque reúne servicios, volúmenes, variables y reinicios en un solo lugar.

¿Cómo evito perder los datos de n8n al reiniciar el contenedor?

Montá un volumen sobre /home/node/.n8n. Con un volumen nombrado, los datos sobreviven aunque borres o recrees el contenedor. Si usás PostgreSQL, sumá otro volumen para /var/lib/postgresql/data.

¿Cómo configuro SSL en n8n con Docker?

Usá un reverse proxy como Traefik o Nginx con certificados de Let’s Encrypt. El proxy termina el SSL y reenvía a n8n por el puerto 5678. En n8n, definí N8N_PROTOCOL=https y WEBHOOK_URL con tu dominio.

¿Cómo arreglo el error EACCES en n8n Docker?

Cambiá el propietario de la carpeta montada con sudo chown -R 1000:1000 ./n8n_data. El error aparece cuando el usuario del contenedor, UID 1000, no tiene permiso de escritura. Con volúmenes nombrados, Docker maneja los permisos.

¿Qué diferencia hay entre SQLite y PostgreSQL en n8n?

SQLite es la base por defecto, simple y suficiente para pruebas. PostgreSQL soporta mejor la concurrencia, permite backups con pg_dump y es requisito del queue mode. Para producción con carga real, usá PostgreSQL.

¿Qué pasa si cambio la N8N_ENCRYPTION_KEY después de instalar?

Las credenciales guardadas quedan ilegibles y no se pueden recuperar. Tendrías que volver a cargar cada API key y token OAuth. Por eso conviene definir la clave desde el inicio y resguardarla en un gestor de contraseñas.

¿Puedo instalar n8n con Docker en Windows?

Sí, con Docker Desktop y WSL2 activado. WSL2 mejora el rendimiento de los volúmenes. Para uso en servidor, la opción más habitual es un VPS Linux con Docker Engine.

¿Cómo actualizo n8n en Docker?

Hacé un backup, cambiá la versión de la imagen, ejecutá docker compose pull y luego docker compose up -d. Confirmá el resultado con docker compose exec n8n n8n --version.

Conclusión

Instalar n8n con Docker es sencillo si cuidás cuatro cosas: el volumen que persiste los datos, la N8N_ENCRYPTION_KEY que protege las credenciales, la WEBHOOK_URL que hace posibles los webhooks reales y un reverse proxy con SSL. Para desarrollo, alcanza un docker run con volumen. Para producción, el mínimo razonable es Compose con PostgreSQL, versión fijada y backups probados.

n8n cambia rápido, así que antes de copiar configuraciones fijate la documentación oficial de instalación con Docker. Si querés ir más allá de la instalación, tenemos una guía completa de automatización con n8n.

Fuentes

Te puede interesar...